Моделирование редактируемых списков в 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 с обновляемыми списками, избегая дублирования?

Ответы на вопрос(2)

Ваш ответ на вопрос