从数据对象转换为业务对象。最佳实践

时间:2011-06-25 16:19:14

标签: c# data-access-layer

假设DataLayer中有一个UserEntity需要转换为BusinessLayer中的User。这两种类型之间没有1:1的映射,并且继承不是一种选择。

我想将User转换为UserEntity,反之亦然。这样做的最佳方式是什么?我看到一些模式,但我不知道哪个更好,为什么:

  1. 在用户2方法中实施:从实体和ToEntity
  2. 实施TypeConverter
  3. 重载=运算符

1 个答案:

答案 0 :(得分:2)

不要重载赋值运算符 - 这是令人讨厌的,并会咬任何将继承您的代码的开发人员。最好是明确的。

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

并确保使用 AutoMapper 来最小化代码量。

  

AutoMapper使用流畅的配置   用于定义对象 - 对象映射的API   战略。 AutoMapper使用了   基于约定的匹配算法   将源匹配到目标值。   目前,AutoMapper正在适应   模型投影场景   将复杂对象模型展平为DTO   和其他简单的物体,其设计   更适合序列化,   沟通,消息,或简单地   反腐败层之间   域和应用层。

<强>更新

您可以将这些方法添加到User类,对于一个小项目来说可能就足够了。在设计方面我有点纯粹,并且会将适配器逻辑保留在这些类之外。 为什么User类必须依赖并且对UserEntity类有任何了解?将它们绑在一起对我来说有点气味。单独的适配器层更适合未来发展。例如,如果您必须用不同的数据库层替换数据库层(即从Linq2SQL迁移到EntityFramework或Dapper),您只需要创建新的适配器 - 您的业务类将保持不变。