我正在考虑在即将开展的项目中使用AutoMapper并试图找到可能的“瓶颈”。目前,我能想象的最复杂的案例如下: 一个域类,由数据库中的3个(例如)表表示(我的数据访问层是LINQ to SQL)。要构建类的实例,我需要执行3个查询:
Class
属性)Class.Code
属性)Class.Parameters
集合)我不确定如何配置映射。以下是我考虑的选项:
Tuple<A,B,C>
- &gt; Class
A
- &gt; Class
映射并让类型转换器完成工作吗?没有看起来像是胜利。你会建议什么?
编辑:嗯,这种复杂的情况非常罕见(10-20%),我可以手动完成,剩下的80-90%使用AutoMapper就好了。但是我想知道AutoMapper是不是为这样的策略而设计的,或者我错过了一些重要的东西。
答案 0 :(得分:2)
您的问题很难回答,因为域对象获取其数据的方式和位置不是AutoMapper的关注点。来自AutoMapper documentation:
AutoMapper面向模型 投影场景趋于平缓 DTO和DTO的复杂对象模型 其他简单的物体,其设计是 更适合序列化, 沟通,消息,或简单地 反腐败层之间 域和应用层。
但是,这并不意味着您对AutoMapper的使用不应该考虑到域对象背后的思考过程。作为一个例子,懒惰的装载让人想起。例如,在您的情况下,如果您在Class.Parameters
属性上使用延迟加载,但随后通过AutoMapper运行该属性,则始终会加载数据。这就是坚持one model per view的规则很重要的原因。
Automyper的创建者之一Jimmy Bogard讨论了他对AutoMapper: the Object-Object Mapper中AutoMapper的看法。我希望我可以直接链接到它,但在上述博格德的评论回复中说:
这是我们一直在寻找的东西 虽然(双向绑定),但在 最后,我们发现也有 更新中的大量业务验证。
相反,我们形成了其他模式 从a更新模型 消息/形式。请参阅Code Camp Server 来源了解更多详情。
如上所示,您可以在CodeCampServer的源代码中发现大量使用AutoMapper。可以在source code提供的ASP.NET MVC 2 in Action中找到CodeCampServer代码的简化版本。
答案 1 :(得分:1)
这应该是一个判断对象模型的判断决定。
优点:
缺点: