2011-06-25 74 views
4

假设DataLayer中有一个UserEntity需要转换为BusinessLayer中的用户。这两种类型之间没有1:1映射,继承不是一种选择。从数据对象转换为业务对象。最佳实践

我想将用户转换为UserEntity和其他方式。这样做的最好方法是什么?我看到一些模式,但我不知道哪个好,为什么:

  1. 实现用户2种方法:从实体和ToEntity
  2. 实现的TypeConverter
  3. 重载=操作

回答

2

不要重载赋值运算符 - 它很讨厌,并且会咬任何继承你的代码的开发者。最好是明确的。

我会封装逻辑映射这两种类型(或更多,如果它不是1:1)在一个单独的类。创建一个UserAdapter类,您可以在其中实现您的ToEntity/FromEntity方法。

并确保您使用AutoMapper以尽量减少代码量。

AutoMapper使用流利配置 API来定义一个对象对象的映射 策略。 AutoMapper使用基于约定的匹配算法 匹配源到目标值。 目前,AutoMapper是面向 朝向模型投影场景来 弄平复杂对象模型的DTO 等简单的目的,其设计 更适合于系列化, 通信,消息收发,或仅仅是 抗腐败层的 之间域和应用程序层。

更新:

可以将这些方法添加到User类,它可能是足够的一个小项目。当涉及到设计时,我有点纯粹并且会将适配器逻辑保留在这些类之外。 User类为什么要依赖并具有UserEntity类的任何知识?把它们绑在一起对我来说有点味道。一个单独的适配器层更具前瞻性。例如,如果您必须用不同的数据库层(即从Linq2SQL转移到EntityFramework或Dapper)来替换数据库层,您只需创建新的适配器 - 您的业务类将保持不变。

+0

为什么不在用户类中添加ToEntity/FromEntity? – JimK

+0

AutoMapper的+1。 –

+0

@JimK - 更新了答案 –