2010-02-03 2 views
8

Можно ли использовать AutoMapper с неизменяемыми типами?Automapper and immutability

Например, мой тип домена является неизменным, и я хочу сопоставить свой вид вида с этим.

Я считаю, что это не так, просто хочу, чтобы это подтвердилось.

Также, как лучше всего использовать типы доменов неизменяемыми, какова наилучшая практика при сопоставлении типов просмотров с типами доменов?

+0

Доменные типы неизменяемы? Я не верю, что было бы правильным утверждением – David

+2

@ Давид Почему бы и нет? –

ответ

8

Обычно я использую сопоставление типов вида для типов домена вручную, поскольку я обычно буду работать через более сложный интерфейс, используя методы и т. Д. Если вы используете AutoMapper для перехода из представления в домен, вы теперь заперты в модель анемичного домена, независимо от того, намеренно вы решили или нет.

+0

Почему вы говорите, что модель домена анемична, если вы используете automapper для сопоставления из представления в домен? Вам понадобится модель вашего домена, заполненная данными из представления. Это потому, что вы предлагаете создавать/заполнять домен через ctors/methods? –

+1

Да, точно. Ознакомьтесь с моей серией по укреплению вашего домена: http://www.lostechies.com/blogs/jimmy_bogard/archive/2010/02/03/strengthening-your-domain-a-primer.aspx Если вы посмотрите на другой Структуры MVC, такие как Rails, концепция модели - это постоянная модель, поэтому вам не нужен AutoMapper. –

+0

Я думаю, что ваши статьи качали меня, я часто использовал automapper для сопоставления объектов домена с dto/vm, но всегда в конечном итоге нужно искать, как заставить automapper делать что-то другое, просто сопоставляющее свойства друг с другом. Выполнение этого вручную не облегчает чтение и отладки. Как вы структурируете код - т. Е. Где вы помещаете методы, которые отображают свойства объектов? – sambomartin

2

AutoMapper полагается на средства для создания свойств, поэтому, если у вас есть свойства только для чтения, AutoMapper не будет очень полезен.

Вы можете переопределить поведение отображения и, например, сконфигурировать его для вызова конкретного конструктора, но это в основном побеждает цель AutoMapper, потому что тогда вы делаете сопоставление вручную, и вам удавалось только добавить неуклюжий дополнительный шаг в этом процессе.

Для меня не имеет большого значения, что ваша модель домена неизгладима. Как вы его обновляете? Является ли все приложение доступным только для чтения? И если да, зачем вам когда-либо понадобилось отображать в вашей модели домена, а не от? Неизбежная модель домена звучит ... довольно бесполезно.

P.S. Я предполагаю, что вы имеете в виду this AutoMapper, а не auto-mapping feature in Fluent NHibernate или даже какую-то другую совершенно другую вещь. Если это неправильно, вы должны быть более конкретными и добавлять теги для своей платформы/языка.