今のシステムの設計の仕方
代表的なシステム設計をいくつか紹介します。どれも万能ではなく、たいていの場合は必要ありません(YAGNI)。
Event-driven architecture
注文サービス
誰が聞いているかを知らない
イベントバス
- 在庫
- 請求
- 通知
- 向いている
- 1 つの出来事から、独立した処理がいくつも続く
- たいてい不要
- 処理が 1、2 ステップで、直接呼び出せば足りる
Domain-driven design
営業
Customer
商談中の相手
- 変換層
請求
Customer
支払い元のアカウント
- 変換層
サポート
Customer
問い合わせをした人
- 向いている
- 業務が複雑で、チームごとに同じ言葉の意味が違う
- たいてい不要
- ほぼ CRUD だけ
Explicit architecture
Adapters
- UI
- データベース
- 外部サービス
Application
Domain
依存はすべて中心へ向かいます。この呼び方は Herberto Graça によるものです。
- 向いている
- 業務ルールが長く使われ、外部の依存先が変わるかもしれない
- たいてい不要
- 小さなプロジェクト、または長く保守しない
Distributed system
クライアント
ロードバランサー
- サービスのレプリカ
- サービスのレプリカ
サービスのレプリカ
ネットワーク断
データ
複数のコピー
- 向いている
- 1 台では本当に足りない、または複数リージョンにまたがる必要がある
- たいてい不要
- 1 台でまだ足りている
1 つのアプリ、1 つのデータベース
アプリ
データベース
- 向いている
- ほとんどの場合
どのシステムがあなたに最も合うかは、domain expert と、私のような経験のある system designer が一緒に決める必要があります。