2011-08-16 12 views
0

初心者の方から来た、まあまあですが完全に有効な質問です。 コンテキスト:私の「ドメインオブジェクト」には名前(およびその他の属性がありますが、重要ではありません)があります。この名前は、データベースで定義されているいくつかのパターンに従って生成されます。 ...誰がドメインオブジェクトの名前を決定する必要がありますか?ドメインオブジェクトは、それが自分の名前だ(この「名前」は、それ自身または他のオブジェクトの属性に基づいてすることができますのでご注意ください)またはサービスがパターンに従って名前を決定し、その後ドメインオブジェクトの振る舞い方法

domainObject.setName(theActualName) 

のようなものを呼び出す必要があります決定する必要があります私は「サービス」アプローチに従う傾向がありますが、一方で、このタスクはオブジェクト固有の動作である必要があります。

返信いただきありがとうございます。

答えて

1

私は、オブジェクトが、それは私がそのクラスでこのメソッドを置く、その名前を計算するために必要なすべてのデータが含まれている場合は、Tell Don't Ask Principle

を見るべきだと思います。このデータが他のオブジェクトの属性に基づいており、親クラスにもデータを含むこの子オブジェクトが含まれている場合は、再び親クラスを作成します。

ただ簡単にしてください。本当に必要がなければ、私はサービスクラスを紹介しません。 DDDの用語では、ドメイン関連のロジックをドメインクラスに配置する必要があります。

1

これはロジックを含むドメインオブジェクトですか?もしそうなら、私はむしろDAOへの参照を与え、それ自身で名前を決めることができます。このようにして、あなたのロジックはあなたのデータの近くにあります。

1

問題のカップルはこれに耐える:

  1. あなたが名前の管理のいくつかの並べ替えが必要ですか? (例として、名前でオブジェクトを検索するディレクトリがあります)。そうであれば、サービスの使用を検討してください。 (代わりに、各ドメインオブジェクトが名前を決めるとそれ自体を登録するように手配する)
  2. ドメインオブジェクトは、作成されて名前が付けられると論理的にデータベースから独立していますか?そうであれば、サービスにデータベース依存を置くことによってそれらを独立に保つことは良い習慣です。

は、ドメインオブジェクトはとにかくデータベースに拘束されることを予定している場合、および一元名を管理する必要がない場合は、その後、私は、オブジェクトが自分自身に名前のドメインを持つことがobject cohesion大きい方につながると思うだろう。

+0

一般的なワークフローは次のようになります。ユーザーがフォームにデータを入力してファイルをアップロードし、この全体がコンテンツ管理システムに保存されます(EMC Documentumまたは共有ポイント)。ドメインオブジェクトは、実際にはユーザーが入力したデータ+コンテンツ+ライフサイクルステージ、オブジェクト名、オブジェクトセキュリティなどさまざまな条件に基づいて決定される他の属性です。 –