Automapper и неизменность - PullRequest
       5

Automapper и неизменность

9 голосов
/ 04 февраля 2010

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

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

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

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

Ответы [ 3 ]

9 голосов
/ 04 февраля 2010

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

2 голосов
/ 04 февраля 2010

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

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

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

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

0 голосов
/ 22 июля 2018

Предположим, что вы действительно хотите неизменное свойство для вашего типа Домена, скажем, Id. Ваш тип домена может выглядеть примерно так:

public class DomainType
{
    public DomainType(int id)
    {
        Id = id;
    }

    public int Id { get; }
    // other mutable properties
    // ...
}

Затем вы можете использовать ConstructUsing, используя открытый конструктор по вашему выбору, например:

CreateMap<ViewType, DomainType>()
    .ConstructUsing(vt => new DomainType(vt.Id));

Затем отобразите все изменяемые свойства обычным способом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...