映射器与构造函数

Inf*_*dem 5 c# automapper

我正在使用AutoMapper设置的项目。由于大多数对我来说都是陌生的,因此我对原因保持开放的态度。

假设我有两节课:

class Foo
{
    public string name { get; set; }
    public int rank { get; set; }
    public bool isDelected { get; set; }
}

class FooView
{
    public string name { get; set; }
    public int rank { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

而不是使用ORM,为什么我不只是使用将FooView作为参数的构造函数。

class Foo
{
    public Foo(FooView source)
    {
        this.name = source.name;
        this.rank = source.rank;
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,只要我有FooView并且需要Foo,我就说

var myFoo = new Foo(FooView);
Run Code Online (Sandbox Code Playgroud)

它为我提供了我在一个位置所需的所有逻辑,并且我可以在任何地方使用它。如果我需要更新代码,则将其与Model定义放在同一位置。那我想念什么呢?

Ste*_*eve 2

如果您的所有模型都在同一个装配体中或者直接依赖于其他项目,这可能没问题。如果您的模型很好地对齐,则 AutoMapper 非常有用,但如果您需要对映射进行更多控制,我倾向于将它们放入专用帮助程序或 MVC 控制器中的静态映射方法中。

这有助于将我的映射逻辑与模型分开

private static Foo MapToFoo(FooView vm) 
{
    var foo = new Foo();
    foo.Name = vm.Name;
    foo.Rank = vm.Rank;
    ...
    return foo;
}
Run Code Online (Sandbox Code Playgroud)