c# - 映射器vs构造函数

标签 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; }
}

而不是使用ORM,为什么我不只是使用将FooView作为参数的构造函数。
class Foo
{
    public Foo(FooView source)
    {
        this.name = source.name;
        this.rank = source.rank;
    }
}

在这种情况下,每当我有FooView并且需要Foo时,我只是说
var myFoo = new Foo(FooView);

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

最佳答案

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

这有助于使我的映射逻辑与模型分离

private static Foo MapToFoo(FooView vm) 
{
    var foo = new Foo();
    foo.Name = vm.Name;
    foo.Rank = vm.Rank;
    ...
    return foo;
}

关于c# - 映射器vs构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38210181/

相关文章:

c# - 从外部将值传递给 AutoMapper 类型转换器

c# - 依赖解析器的 Automapper IMapper 问题

c# - Automapper项目使用

c# - 将命名空间添加到序列化的 xml

c# - WCF 数据服务 : MaxProtocolVersion set at v2 despite Service set at v3. 在 OfType() 上结束抛出错误

c# - 如何将 secret 从 VSTS 传递到测试执行上下文

c# - Steam VR 场景在 Unity 中重新加载时停止响应

自动映射器以不同的方式映射一个字段

asp.net-mvc - 使用 ViewModels、EditModels 和 AutoMapper 的 ASP.NET MVC 引用实现

c# - Linq multiple order by 的性能更高吗?