数据库实体与域对象或DTO之间的映射

时间:2018-04-09 23:18:45

标签: c# .net design-patterns architecture

我的数据库对象和域对象之间有一个复杂的映射逻辑。因此,我没有使用像AutoMapper这样的任何第三方库。我想知道什么是更好的代码设计:

选项#1。将映射器抽象为IServiceNameMapper并作为依赖项注入IServiceName

选项#2。将扩展方法写入数据库对象和域对象以在它们之间进行转换。

我倾向于选项#1,因为我得到了一个很好的关注点,其中映射逻辑被抽象出核心服务逻辑并作为依赖注入服务。这也使我能够在将来扩展或更改映射逻辑,而无需更改服务实现。

有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

从纯粹的架构角度来看,选项1更好。然而,有时这可能是过度设计。例如,我没有兴趣将我的DTO与实体分离,所以我所做的只是接受DTO构造函数中的实体或在DTO上创建ToEntity()方法并将映射保留在DTO中。理论上它是坏的,因为DTO不能在不吸引实体的情况下用于另一个项目但实际上我估计我需要的风险相当低,因为Silverlight现在已经死了:)除非你进入极端单元测试我认为扩展方法很好。基本上唯一可能出现的问题是您的单元测试将测试方法和映射逻辑,并且您无法编写仅测试该方法的测试。大不了!