2017-01-11 10 views
1

C#を使用してイベントソースを使用してCQRSの学習と作成を開始しました。私は多くのサンプルをチェックし、各サンプルでは、​​ドメインオブジェクトを構築する際に、必要なドメインフィールドはすべてコンストラクタを使って渡すか、静的メソッドを使ってドメインオブジェクトを作成します。C#DDD - ドメインオブジェクトの作成

トップレイヤーから取得している個々のフィールドの長いリストを渡す代わりに、完全なDTOをドメインオブジェクトに渡す必要がありますか?

public class Student : AggregateRoot 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 

    // Without ID and Name a domain object should not be created 

    //Can I write like this?   
    public Student(StudentDto studentDto) 
    { 
     ID = studentDto.ID; 
     Name = studentDto.Name; 
    } 

    //Can I write like this? 
    public Student(int id,string name) 
    { 
     ID = id; 
     Name = name; 
    } 
} 
+0

'AggregateRoot'と' StudentDto'は何ですか? –

+2

ドメインモデルはDTOのことを知ってはいけません。 –

+0

AgfregateRootは私のすべての集約の基本クラスであり、StudentDtoは私のサービス層から他の層へのデータをpasaするための単なるクラスです..domanのモデルはdtosに関する知識を持っていてはいけないので、私の質問を解決します。完全なdtoの代わりに私が間違っている場合私を是正してください。 – Deb

答えて

4

DTOはここでは間違ったことです。 DTOとドメインオブジェクトの間に望ましくないリンケージが導入されており、それらは別々に進化しています。より多くの引数を取るためにドメインオブジェクトが進化するかもしれない、あるいはDTOがより多くの特性を必要とすると想像することができます。

一般に、明示的なフィールドドメインオブジェクトのニーズをコンストラクタに渡す必要があります。コンストラクタ引数のリストが長くなると、ドメインオブジェクトに多すぎるリソースがあるか、Builderパターンを使用して必要な明示的な引数の数を減らすことができます。

+0

ありがとうございました。私は考えました。 – Deb

+0

重大なオーバーラップが予想されますが、ボイラープレートを緩和するためにオートマッパが導入されることがよくあります。 –

0

これはDDD永続性問題にアプローチする1つの方法だと思います。

https://vaughnvernon.co/?p=879を参照してください。V. Vernonも同じことを行います。

関連する問題