今のシステムの設計の仕方

代表的なシステム設計をいくつか紹介します。どれも万能ではなく、たいていの場合は必要ありません(YAGNI)。

Event-driven architecture

  1. 注文サービス

    誰が聞いているかを知らない

  2. イベントバス

    • 在庫
    • 請求
    • 通知
向いている
1 つの出来事から、独立した処理がいくつも続く
たいてい不要
処理が 1、2 ステップで、直接呼び出せば足りる

Domain-driven design

  • 営業

    Customer

    商談中の相手

  • 変換層
  • 請求

    Customer

    支払い元のアカウント

  • 変換層
  • サポート

    Customer

    問い合わせをした人

向いている
業務が複雑で、チームごとに同じ言葉の意味が違う
たいてい不要
ほぼ CRUD だけ

Explicit architecture

Adapters

  • UI
  • データベース
  • 外部サービス

Application

Domain

依存はすべて中心へ向かいます。この呼び方は Herberto Graça によるものです。

向いている
業務ルールが長く使われ、外部の依存先が変わるかもしれない
たいてい不要
小さなプロジェクト、または長く保守しない

Distributed system

  1. クライアント

  2. ロードバランサー

    • サービスのレプリカ
    • サービスのレプリカ
    • サービスのレプリカ

      ネットワーク断

  3. データ

    複数のコピー

向いている
1 台では本当に足りない、または複数リージョンにまたがる必要がある
たいてい不要
1 台でまだ足りている

1 つのアプリ、1 つのデータベース

  1. アプリ

  2. データベース

向いている
ほとんどの場合

どのシステムがあなたに最も合うかは、domain expert と、私のような経験のある system designer が一緒に決める必要があります。