Предположим, у вас есть канонический объект домена клиента. У вас есть три разных экрана, на которых отображается клиент: внешний администратор, внутренний администратор и обновление учетной записи.
Предположим далее, что на каждом экране отображается только подмножество всех данных, содержащихся в объекте Customer.
Проблема в том, что когда пользовательский интерфейс передает данные обратно с каждого экрана (например, через DTO), он содержит только это подмножество полного объекта домена клиента. Поэтому, когда вы отправляете этот DTO на фабрику клиентов для повторного создания объекта Customer, у вас есть только часть клиента.
Затем вы отправляете этого клиента в свой репозиторий клиентов, чтобы сохранить его, и куча данных будет уничтожена, потому что ее там нет. Трагедия.
Итак, вопрос: как бы вы справились с этой проблемой?
Некоторые из моих идей:
включить аргумент в
Репозиторий, указывающий, какая часть
Клиент обновлять и игнорировать
другие
когда вы загружаете Клиента, сохраняете его в статической памяти, или в сеансе, или где угодно, а затем, когда вы получаете один из DTO от пользовательского интерфейса, обновляйте только те части, которые относятся к DTO
ИМО, оба из них - кладжи. Есть еще идеи получше?
@ chadmyers: вот проблема.
Сущность имеет свойства A, B, C и D.
DTO # 1 содержит свойства для B и C.
DTO # 2 содержит свойства для C и D.
Пользовательский интерфейс запрашивает DTO # 1, вы загружаете сущность из хранилища, конвертируете ее в DTO # 1, заполняя только B и C, и передаете ее в UI.
Теперь пользовательский интерфейс обновляет B и отправляет DTO обратно. Вы воссоздаете сущность, и она заполнена только B и C, потому что это все, что содержится в DTO.
Теперь вы хотите сохранить объект, у которого заполнены только B и C, с A и D, пустыми / пустыми. Хранилище не может знать, следует ли ему постоянно обновлять A и D как пробелы или игнорировать их.