【发布时间】:2014-11-07 13:29:08
【问题描述】:
在数据库对象和域对象之间进行映射时,该功能应该驻留在我的应用程序的哪个“层”?
说我有:
-
DAL- 引用了核心域 -
Service- 引用了DAL和核心域
在这种情况下,映射放在哪里更合适?
【问题讨论】:
在数据库对象和域对象之间进行映射时,该功能应该驻留在我的应用程序的哪个“层”?
说我有:
DAL - 引用了核心域Service - 引用了 DAL 和核心域在这种情况下,映射放在哪里更合适?
【问题讨论】:
在这种情况下,您的 DAL 将是一个好地方,因为它已经引用了您的核心,您的域实体应该存在于其中。它可以获取数据,并在返回之前将其转换为域对象。
这样可以将DB对象的知识封装到DAL层,这是一件好事。如果你需要改变你的数据库,你只需要修改这个层。应用程序的其余部分只知道域。
【讨论】:
如果你想遵循一层只需要知道下一层的原则(想法来自Law of Demeter),最佳实践是将翻译代码放在服务层中。
但是,由于核心域可以被认为是服务和数据访问层中间的另一层,并且考虑到服务层直接与 DAL 对话(打破 LoD 原则),可能是更简单、更实用的解决方案(正如@wblanks 所说)可能是将翻译代码放在数据访问层中。
【讨论】: