2016-05-18 4 views
2

私はDDDを勉強していて、私の現在の仕事で新しいAPIを構築できるようにするために多くのコードを見てきました。DDD、オートマッパーと工場

のは、以下の階層化アーキテクチャを想定してみましょう:

  1. アピ
  2. アプリケーションサービス(ViewModelにはここにある)
  3. ドメイン(ドメインサービスとドメインモデルがここにある)
  4. インフラ

アプリケーションサービスドメインモデルオブジェクトを作成するためにAutomapperを使用し、ドメインサービスレイヤに渡します。あれは正しいですか?私はすでにそこに使用する準備ができてドメインモデルオブジェクトを持っている場合は

は、なぜ私は工場使用する必要がありますか?私は工場を無視して間違っているだろうか?

私はビューモデルをマッピングするためにAutomapperを使用しているのでにドメインモデルは、工場表示されないを、オブジェクトのオブジェクト? 私はここに大きなものがないと感じています。

+0

私はこの質問がhttp://programmers.stackexchange.comの良い候補だと信じています。 –

+0

ありがとうRay、私はそこに尋ねます。 – Felipe

答えて

7

アプリケーションサービスはAutomapperを使用してドメインモデルオブジェクトを作成し、ドメインサービスレイヤーに渡します。あれは正しいですか?

いいえこれはCRUDシステムの作成方法です。ドメインエンティティは自身の状態を保護する必要があり、ドメインエンティティのすべての変更はの方法によって行う必要があります。以下のような

何か:

var user = repos.Get(userId); 
user.ActivateAccount(); 
repos.Update(user); 

は、このようにアプリケーション・サービスは、アクションを中心にモデル化する必要がありますだけ正確にドメインエンティティのように見えるのDTOに沿って通過することはありません。

あなたの例を使って、私は新しいユーザーにどのように渡しますか?私は、DTOユーザーにマップするために、そして私のドメイン・レイヤーは、工場

を呼んで、私は、ドメインエンティティの利用者に情報のサブセットを含んでいるでしょうAMユーザーDTO、ある情報だけを作成しますAutoMapperを使用する必要がありますユーザーを正常に作成するために必要です。

アプリケーションサービスでは、ファクトリを使用してエンティティを作成し、そのエンティティをDTOからの情報で埋め込むことができます。私は個人的に工場なしでエンティティを作成しますが、ユーザコンストラクタに必須の情報を提供します。

+1

メソッドはもちろん、集約ルートとして機能するドメインエンティティ上にある必要があります。 – VoiceOfUnreason

+0

ありがとう@jgauffin、あなたの例を使用して、私はどのように新しいユーザーを渡すでしょうか? AutoMapperを使用してDTOユーザーにマップし、ドメイン層で工場に電話する必要がありますか? – Felipe

+0

私の更新を読んでください。 – jgauffin