Моделирование редактируемых списков в DTO, используемых сервисами
Скажем, у вас есть следующий контакт 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, чтобы реализовать следующее поведение?
Клиент может отправить запрос, который будет
добавить номер телефона, обновить два номера телефонов и удалить два добавить двадобавить два адреса электронной почты, обновить один адрес электронной почты и удалить тридобавьте три адреса веб-сайтов, обновите два адреса веб-сайтов и удалите два. Вы поняли идею.
Одним из вариантов является добавление атрибута Action к каждому Address / PhoneNumber / EmailAddress / WebSiteAddress.
Тогда код адреса обновления выглядит так:
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 с обновляемыми списками, избегая дублирования?