Как преобразовать editmodel/postmodel в модель предметной области

В проекте ASP.NET MVC мы используем AutoMapper для сопоставления модели предметной области с моделью представления -, а иногда также сглаживаем иерархию при этом. Это работает как шарм и делает логику рендеринга наших представлений очень компактной и простой.

Путаница начинается, когда мы хотим перейти от модели представления (или постмодели или модели редактирования )к модели предметной области , особенно при обновлении объектов . Мы не можем использовать автоматическое/двухстороннее -сопоставление, потому что:

  1. нам пришлось бы развернуть плоскую иерархию
  2. все свойства в модели предметной области должны быть изменяемыми/иметь общедоступные сеттеры
  3. изменения, поступающие из представления, не всегда являются просто плоскими свойствами, отображаемыми обратно в домен,но иногда нужно вызывать такие методы, как "ChangeManagerForEmployee()" или подобные.

Это также описано в статье Джимми Богардса :. Дело на двоих -так отображение в AutoMapper , но решение этого подробно не описано, только то, что они идут:

From EditModel to CommandMessages – going from the loosely-typed EditModel to strongly-typed, broken out messages. A single EditModel might generate a half-dozen messages.

На аналогичный вопрос SO есть ответ Марка Симана , где он упоминает, что

We use abstract mappers and services to map a PostModel to a Domain Object

но детали -концептуальной и технической реализации -опущены.

Наша идея сейчас состоит в том, чтобы:

  1. Получить FormCollection в методе действия контроллера
  2. Получите исходную модель предметной области и сведите ее к viewModelOriginal и viewModelUpdated
  3. . Слияние FormCollection с viewModelUpdated с использованиемUpdateModel()
  4. Используйте какой-нибудь общий вспомогательный метод для сравнения viewModelOriginal с viewModelUpdated
  5. Либо A )Создать CommandMessages а-ля Джимми Богард, либо B )Преобразовать различия непосредственно в модель предметной области с помощью свойств и методов (, возможно, сопоставив 1 -1 свойство напрямую через AutoMapper)

Может ли кто-нибудь привести несколько примеров того, как они поступают из FormCollection через editmodel/postmodel в модель предметной области? «CommandMessages» или «абстрактные картографы и сервисы»?

9
задан Community 23 May 2017 в 12:24
поделиться