Сохранение нескольких DTO, сопоставленных одному объекту - PullRequest
1 голос
/ 15 марта 2011

Полагаю, об этом спрашивали раньше здесь , но я все еще не понимаю, какой правильный подход следует использовать.

У меня есть клиентское приложение WPF, которое общается со службой WCFчтобы получить данные.Что касается службы, у меня есть большая сущность (около 25 свойств), и у меня есть три формы в моем клиентском приложении.В каждой форме мне нужна возможность редактировать определенные свойства объекта моего домена.Я не хочу возвращать крупную сущность через службу, поскольку мне нужно всего 3-4 ее свойства в каждой форме.Поэтому я создал три DTO (мы используем AutoMapper), по одному для каждого экрана.Служба возвращает DTO, и это очень хорошо работает, когда идет поиск.

Мой вопрос: как мне сохранить мои DTO.Мы используем NHibernate на уровне сервиса.Если я передаю свои частичные DTO сервису для сохранения, мне нужно будет каждый раз перезагружать мою большую сущность для выполнения обновления.

Это единственный способ справиться с этим сценарием?

Чтоу меня есть другие варианты, если мне нужно отобразить частичные представления одной единственной сущности в пользовательском интерфейсе ... помимо отправки всей сущности по проводам ... или создания трех DTO?

Спасибо.

1 Ответ

1 голос
/ 16 марта 2011

Используя NHibernate на уровне сервиса, логично, что вам нужно будет:

a) загрузить объект во время операции обновления в службе, изменить необходимые свойства и затем зафиксировать транзакцию, или

b) если у вас уже есть объект, доступный в службе (но не связанный с сеансом NHibernate), вы можете изменить необходимые свойства, вызвать session.Update (obj), чтобы повторно связать объект с сеансом, а затем зафиксировать сделка.

Мы регулярно используем первый подход, когда в нашей модели есть сотни различных объектов. Мы передаем специализированные объекты командных запросов от клиента к серверу, а затем наш сервисный уровень отвечает за выполнение работы, указанной в командных запросах.

В качестве альтернативы вы можете сформулировать запрос HQL, как указано здесь . Но это быстро станет довольно уродливым и сложным в обслуживании.

...