次の Contact DTO があるとします。Address/PhoneNumber/EmailAddress/WebSiteAddress クラスも単純な DTO です (データのみで動作はありません)。
public class Contact
{
public Address[] Addresses { get; set; }
public PhoneNumber[] PhoneNumbers { get; set; }
public EmailAddress[] EmailAddresses { get; set; }
public WebSiteAddress[] WebSiteAddresses { get; set; }
}
次の動作を実装できるようにするには、DTO をどのようにモデル化すればよいですか?
クライアントはリクエストを送信できます。
- 電話番号を追加、2 つの電話番号を更新、2 つを削除、2 つを追加
- 2 つのメール アドレスを追加し、1 つのメール アドレスを更新し、3 つのメール アドレスを削除します
3 つの Web サイト アドレスを追加し、2 つの Web サイト アドレスを更新し、2 つを削除します。あなたはアイデアを得る。
1 つのオプションは、各 Address / PhoneNumber / EmailAddress / WebSiteAddress に Action 属性を追加することです。
次に、更新アドレスのコードは次のようになります。
var addressesToUpdate = serviceContact.Addresses.Where(x => x.AddressAction.ToUpper() == "UPDATE");
var addressesToAdd = serviceContact.Addresses.Where(x => x.AddressAction.ToUpper() == "ADD");
var addressesToDelete = serviceContact.Addresses.Where(x => x.AddressAction.ToUpper() == "DELETE").Select(x => x.AddressId);
他のすべてのリストに対してこれを繰り返すと、重複が生じる可能性があります。
私の質問は:
重複を避けながら、更新可能なリストを使用してサービス DTO をモデル化するにはどうすればよいですか?