AngularJS、C#、ASP.Net Web API、およびFluent NHibernateを使用してWebアプリケーションを構築しています。 DTOを使用してプレゼンテーション層(角度表示)にデータを転送することにしました。 私は、DTOの一般的な構造化と命名に疑問を抱いていました。 私のシナリオを示す例です。DTO命名規則、モデリングおよび継承
1)だけでIDと名前 :、私の見解で/プレゼンテーション層は、私のようなお客様のさまざまな味を取得する必要が
public class Customer
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Address Address { get; set; }
public virtual ICollection<Account> Accounts { get; set; }
}
今: は、私はのように見えるドメインエンティティと呼ばれる顧客を持っているとしましょう2)ID、名前と 3アドレス)ID、名前、住所、私はこれを達成するためのDTOのセットを作成している
アカウント:
public class CustomerEntry
{
public int Id { get; set; }
public string Name { get; set; }
}
public class CustomerWithAddress : CustomerEntry
{
public AddressDetails Address { get; set; }
}
public class CustomerWithAddressAndAccounts : CustomerWithAddress
{
public ICollection<AccountDetails> Accounts { get; set; }
}
を0
AddressDetailsとAccountDetailsは、対応するドメインエンティティのすべてのプロパティを持つDTOです。
これはクエリとデータの取得に適しています。問題は、挿入と更新のために何を使用するかということです。新しい顧客レコードの作成時には、名前と住所は必須であり、アカウントはオプションです。つまり、すべての顧客プロパティを持つオブジェクトが必要です。したがって、混乱:
1)挿入と更新には何を使用しますか? CustomerWithAddressAndAccounts DTOにはすべてが含まれていますが、名前は挿入/更新に使用するのが少し面倒です。
2)私は別のDTOを作成しますか?私がそうした場合、新しいDTOは正確にCustomerWithAddressAndAccountsのように重複しませんか?
3)上記のDTO継承strcutureは、要件に適しているようですか?これをモデル化する他の方法はありますか?
私はこのトピックについて他の投稿を行ってきましたが、あまり進んでいませんでした。 私がピックアップしたことの1つは、クラス名に接尾辞 "DTO"を使用しないようにすることでした。 少し余分な感じがすると思います。
自分の考え
ご返信ありがとうございます。複数のDTOクラスを使用する動機の1つは、DTOが何のために使用されているかを定義する上でもう少し表現力豊かであることでした。また、IDと名前だけが必要な場合は、本当に完全な本物のCustomerEntryDTO(あなたが記述したもの)を電信線で送信する必要がありますか? – Sennin
@センニン私はあなたのコメントに基づいて私の答えを編集しましたが、私の答えはまだあなたのために不完全であると思います。上記のコメントを追加するために後で編集してもよいでしょうか。 – VS1
@Sennin plsは私の編集2を参照してください。 – VS1