ADMは、マイクロサービスなどの分散サービスのソリューションに適したパターンです。今日のWebベースのビジネスケースの多くに適合します。
Order Domainオブジェクトがあるかどうかを検討します。OOPアプローチでは、Order.Purchase()Order.Cancel()などを追加します。これは、メモリに注文を保持し、同じインスタンスに対して複数のことを行うデスクトップアプリでうまく機能します。
しかし、1つのこと、つまり注文のリストにアクセスして順番に購入するプログラム、または注文のリストを取得して順番にキャンセルするプログラムを使用する分散システムがある場合、同じオブジェクトに両方のメソッドがあると、センス。2つのドメインまたはバインドされたコンテキストが必要です。
PurchaseSystemOrder.Purchase()
そして
CancelSystemOrder.Cancel();
これらのオブジェクトが共有する唯一のものは、プロパティのデータ構造です。
マイクロサービスをどんどん追加していくと、何十種類もの注文ができてしまいます。これらのすべてのシステムによって処理されている同じ概念的な順序であっても、ドメインオブジェクトとしての注文について話すことはもはや意味がありません。
データだけをカプセル化し、それに応じてサービスの名前を変更する、貧血モデルであるOrderを使用する方がはるかに理にかなっています。
PurchaseService.Purchase(Order order)
これでOrderについて再び話し合うことができ、現在デプロイされている他のサービスに影響を与えることなく、処理するために考えている新しいサービスを追加できます。
FowlerとCoはモノリスシステムのバックグラウンドから来ています。彼らの世界では、ADMアプローチは、これらの個別のサービスすべてがメモリ内でインスタンス化され、OrderDTOが渡されて変更される単一のアプリを意味します。これは、メソッドをリッチなOrderモデルに配置するよりもはるかに悪いでしょう。
しかし、分散システムには多くのプログラムがあり、それぞれが単一のOrderメソッドのみを必要とし、それを複数のオーダーで実行し、それぞれをロードし、メソッドを実行してから破棄します。必要なのは、単一のサービスとデータオブジェクトのストリームだけです。
すべてのメソッドの要件と依存関係を心配して1つのメソッドを呼び出し、その後すぐにオブジェクトを破棄することで、リッチモデルを完全に生成しても意味がありません。
さらに、メソッドの1つを変更するには、すべての分散コンポーネントを更新する必要があります。これらのコンポーネントはすべて、ロジックがリッチモデルに依存しているためです。
コードベースに必要のないもののためのスペースがない