2012-01-10 11 views
0

1)BLL-servicesとは何ですか?それらとService Layerサービスの違いは何ですか?ドメインサービスには何があり、サービスレイヤにはどのようなものがありますか?ドメイン駆動型デザインが混乱しています

2)BBLモデルをリファクタリングする方法:Postエンティティには、feedbacks.Add(feedback)を介して別のFeedbackを追加することができるフィードバックがあります。あまりにも単純なブログアプリケーションには計算がありません。 Postエンティティ内にFeedbackを追加する方法を定義する必要がありますか?あるいは、その行動が対応するサービスによって得られるべきか?

3)それはhttp://www.amazon.com/Professional-ASP-NET-Design-Patterns-Millett/dp/0470292784で説明しているように私はUnit-Of-Work(およびUnitOfWork-Repositories)パターンを使用すべきか、NHibernate ISessionを使用するのに十分だろうか?

答えて

3

1)Business LayerService Layerは実際同義語です。 「公式」DDD期間はApplication Layerです。

Application Layerの役割は、Domain ServicesDomain Modelの間の作業を調整することです。これは、例えば、Application関数が最初にRepositoryを介してエンティティをロードしてから、実際の作業を行うエンティティ上のメソッドを呼び出すことを意味する可能性があります。

2)アプリケーションが主にデータ駆動型の場合、完全な機能を備えたDomain Modelを構築することは過度のように見えることがあります。しかし、私の意見では、あなたがDomain Modelに慣れると、それはあなたが行きたい唯一の方法です。 PostFeedback場合

それは以下のカップリングにつながるので、あなたは(あなたがFeedBack項目は、例えばListまたはHashtableに格納されているかどうかを知る必要はありません)最初からAddFeedback(Feedback)方法をしたいとそれは素晴らしい拡張ポイントを提供します。 1Feedbackのアイテムが許可されていないというチェックを追加したい場合はどうなりますか? AddFeedbackメソッドをお持ちの場合、チェックポイントを1つのポイントに簡単に追加できます。

3)UnitOfWorkおよびRepositoryパターンは、DDDの基本的な部分です。私はNHibernateのエキスパートではありませんが、インターフェイスの背後にインフラストラクチャ固有の詳細を隠すことは、常に良い考えです。これによりカップリングが減少し、テスト容易性が向上します。

3

最初にDDDの本またはits short versionを読んで、DDDの基本ブロックを理解することをお勧めします。 BLLサービスやサービスレイヤサービスなどはありません。 DDDであなたが

  • ドメイン層
  • アプリケーション層(ドメインオブジェクトが存在するソフトウェアの心を)持っている、メッセージが送信永続化のための
  • インフラストラクチャ層((アプリケーションを編成) ...)
  • プレゼンテーション層。

これらのすべてのレイヤーにサービスを含めることができます。サービスは、他の多くのオブジェクトに動作を提供するためのものであり、状態はありません。たとえば、ドメイン・レイヤ・サービスは、特定のドメイン・エンティティに属していない、および/または他の多くのオブジェクトで必要とされる、束縛されたビジネスの振舞いを配置する場所です。それが提供する操作の入力と出力は、通常、ドメインオブジェクトです。とにかく

、オペレーションドメインの観点からエンティティに完全に適合するように思われるときはいつでも(Post.AddFeedback(につながるようなポストにフィードバックを追加するなど)又はPost.Feedbacks.Add())私はいつも別の場所で行動をばらまき、徐々に貧血ドメインモデルにつながるサービスを追加するのではなく、そのために行きます。ポストへのフィードバックを追加するときなど、多くの異なるオブジェクト間の接続を必要とするような例外がありますが、ここではそうではありません。

関連する問題