假设DataLayer中有一个UserEntity需要转换为BusinessLayer中的User。这两种类型之间没有1:1的映射,并且继承不是一种选择。
我想将User转换为UserEntity,反之亦然。这样做的最佳方式是什么?我看到一些模式,但我不知道哪个更好,为什么:
答案 0 :(得分:2)
不要重载赋值运算符 - 这是令人讨厌的,并会咬任何将继承您的代码的开发人员。最好是明确的。
我会封装用于在单独的类中映射这两种类型(或更多,如果它不是1:1)的逻辑。创建一个UserAdapter
课程,您可以在其中实施ToEntity
/ FromEntity
方法。
并确保使用 AutoMapper 来最小化代码量。
AutoMapper使用流畅的配置 用于定义对象 - 对象映射的API 战略。 AutoMapper使用了 基于约定的匹配算法 将源匹配到目标值。 目前,AutoMapper正在适应 模型投影场景 将复杂对象模型展平为DTO 和其他简单的物体,其设计 更适合序列化, 沟通,消息,或简单地 反腐败层之间 域和应用层。
<强>更新强>
您可以将这些方法添加到User
类,对于一个小项目来说可能就足够了。在设计方面我有点纯粹,并且会将适配器逻辑保留在这些类之外。 为什么User
类必须依赖并且对UserEntity
类有任何了解?将它们绑在一起对我来说有点气味。单独的适配器层更适合未来发展。例如,如果您必须用不同的数据库层替换数据库层(即从Linq2SQL迁移到EntityFramework或Dapper),您只需要创建新的适配器 - 您的业务类将保持不变。