В проекте ASP.NET MVC мы используем AutoMapper для сопоставления из модели домена в viewmodel, а иногда и при выравнивании иерархии. Это работает как шарм и делает логику рендеринга наших взглядов очень скудной и простой.Как мутировать editmodel/postmodel для модели домена
Путаница начинается, когда мы хотим перейти в другую сторону от модели вида (или постмоделирования или редактирования) к модели домена, особенно при обновлении объектов. Мы не можем использовать автоматизированные/двухстороннее отображение, потому что:
- мы должны unflat уплощенной иерархии
- всех свойств на модели предметной области должен быть изменяемыми/у государственных сеттера
- вызваны изменения исходя из представления, не всегда просто плоские свойства отображаются обратно в домен, но иногда нужно вызывать методы типа «
ChangeManagerForEmployee()
» или аналогичные.
Это также описано в статье Джимми Bogards: The case for two-way mapping in AutoMapper, но решение этой проблемы не описано подробно, только что они идут:
От EditModel к CommandMessages - происходит от loosely- напечатано EditModel для строго типизированных, разбитых сообщений. Один EditModel может генерировать полдюжины сообщений.
В подобном SO question есть ответ на Mark Seeman, где он упоминает, что
Мы используем абстрактные картограф и услуги для отображения PostModel в объект домена
но детали - концептуальная и техническая реализация - не учитывается.
Наша идея сейчас заключается в следующем:
- ПОЛУЧИТЕ FormCollection в методе действия контроллера
- Получить оригинальную модель домена и придавить его viewModelOriginal и viewModelUpdated
- сливая FormCollection в viewModelUpdated с помощью
UpdateModel()
- Используйте некоторый общий вспомогательный метод для сравнения viewModelOriginal с viewModelUpdated
- Либо A) Создать CommandMessages а-ля Джимми Богард или B) мутировать различия непосредственно в модели предметной области с помощью свойств и методов (возможно, отображающих 1-1 свойства непосредственно через AutoMapper)
Может кто-нибудь привести несколько примеров того, как они происходят из FormCollection через editmodel/postmodel для модели домена? «CommandMessages» или «абстрактные карты и службы»?
Я бы задал этот вопрос тысячам оборотов, если бы мог. Я бесконечно искал надежный ответ на этот вопрос. – devuxer
В каком процессе вы в конце концов? –
Привет, Том. Мы закончили тем, что использовали решение смешивания и соответствия, где мы 1. Извлеките объект Dom из DAL/DB, 2. сгладьте объект Dom в ViewModel, 3. используйте TryUpdateModel с FormColl на ViewModel, 4.используйте AutoMapper для обратного сопоставления из сплющенной модели представления в Dom (Иерархия) для простых свойств и 5. используйте службу для сопоставления нетривиальных свойств из методов viewmodel в Dom (объект Dom и/или Dom Service). Надеюсь, что это поможет - я не уверен, какой ответ отметить как правильный, так как это своего рода смесь из нескольких ...? –