【发布时间】:2011-12-03 04:38:25
【问题描述】:
我似乎遗漏了一些东西,并且广泛使用 google 并没有帮助提高我的理解...
这是我的问题:
我喜欢以不了解持久性的方式创建我的领域模型,例如:
- 如果我不需要,我不想添加
virtual。 - 我不喜欢添加默认构造函数,因为我喜欢我的对象始终是完全构造的。此外,在依赖注入的上下文中,对默认构造函数的需求是有问题的。
- 我不想使用过于复杂的映射,因为我的域模型使用了 ORM 不容易支持的接口或其他构造。
对此的一种解决方案是使用单独的域对象和数据实体。使用存储库模式并从 ORM 返回的数据实体构建域对象,可以轻松解决构建的域对象的检索问题。使用 AutoMapper,这将是微不足道的,并且没有太多的代码开销。
但是我对这种方法有一个大问题:如果不自己编写代码,我似乎无法真正支持延迟加载。此外,对于同一个“事物”,我会有很多类,尤其是在 WCF 和 UI 的扩展上下文中:
- 数据实体(映射到 ORM)
- 域模型
- WCF DTO
- 查看模型
所以,我的问题是:我错过了什么?这个问题一般是怎么解决的?
更新:
到目前为止的答案表明了我已经担心的事情:看起来我有两个选择:
- 在域模型上做出妥协以匹配 ORM 的先决条件,从而获得 ORM 泄漏到的域模型
- 创建大量附加代码
更新:
除了接受的答案之外,请参阅my answer 了解有关我如何为我解决这些问题的具体信息。
【问题讨论】:
-
关于2(默认构造函数),NH允许你做构造函数注入;我不确定EF。关于 3(复杂的映射),我不确定您的意思 - 如果对象模型与关系模型不紧密匹配,则存在不可避免的复杂性。 Fluent NHibernate 的约定在这里可能会有所帮助。关于
virtual,我也不喜欢它,但它是无痛的。 -
关于 1(虚拟):对于非延迟加载的实体,您不必这样做。您还可以将 NH 的要求更改为想要他们
标签: c# .net architecture