貧血ドメインモデルと懸念の分離に関するいくつかの質問を読んだことがあります。貧血ドメインオブジェクトでドメインロジックを実行/接続するための最善の手法は何ですか?私の仕事では、かなり貧弱なモデルがあります。現在、ドメイン・オブジェクトに対してデータベース/ビジネス・ロジックを実行するために、「ヘルパー」クラスを使用しています。たとえば、貧血ドメインモデルを扱う技術
購入する必要があるときは、StoreHelperを作成し、ドメインオブジェクトのメソッドを呼び出します。私にとっては、Customer/Productが自分自身をリポジトリに保存する方法を知っていることは理にかなっていますが、おそらくDomainオブジェクトにSave()メソッドを必要としません。また、Customer.Purchase(Product)のようなメソッドには意味がありますが、それはエンティティにドメインロジックを配置しています。
- 顧客と製品は一般的な方法で基本的なCRUD操作を提供し、「エンティティ」クラス(継承:ここ
は、私が遭遇してきたいくつかのテクニックではなく、良い/悪いであることを確認していますおそらくORMを使用して)。
- 長所:各データオブジェクトは、自動的にCRUD操作になるだろうが、その後データベース/ ORM
- 短所に結ばれています。これは、オブジェクト上で、業務の問題を解決し、また、すべてのドメインオブジェクトを結び付けていませんそれは「純粋なデータベース」操作のためのDAO、および独立したビジネスヘルパーを持ってしても意味がないCRUD操作とビジネスロジック
- を処理するために
- 使用ヘルパークラスは適切でない可能性がありますベースのエンティティへ彼らのために鉱石事業特有の事業は?
- このために非静的ヘルパークラスまたは静的ヘルパークラスを使用する方が良いですか?
- 長所:ドメインオブジェクトは、任意のデータベース/ビジネスロジックに縛られていない(完全に貧血)
- 短所:ない非常にOOではなく、非常に自然なアプリケーションコードでヘルパーを使用する(Cコードのように見える)
- (それが切り離されますが)エンティティが付属いくつかの余分なロジックを持っている :懸念
- 短所の良好な分離:エンティティは、任意のリポジトリに
- の長所を保存するためのメソッドを持つダブルディスパッチ技術を使用してくださいC#3.0では
- 、あなたは
- それに触れることなく、ドメインオブジェクトにCRUD /ビジネスメソッドを接続する拡張メソッドを使用することができ、これは有効なアプローチですか?賛否両論は何ですか?
- 他の手法はありますか?
これを処理するための最善の方法は何ですか?私はDDDにはかなり新しいです(私はエヴァンスの本を読んでいます - だから多分私の目を開くでしょう)
お客様を扱うために、さまざまなクラスがたくさんあるようです。何かを複雑に扱うサービスで、大部分を単一のクラスに投げ捨ててみませんか? –
私の答えは地獄のような古いです。 :D –
@ LuckyLindy主にDDDはドメイン専門家とプログラマーの間の橋渡しをしているからです。ドメインモデルには技術的なものが含まれてはいけません。そうでなければ、普遍的な言語は存在できません。技術的なものを取り除くには、それを抽象化しなければなりません。何かを抽象化すると、コードベースが常に膨らみます。 –