【发布时间】:2010-09-03 18:34:38
【问题描述】:
应用程序使用 ADO.NET 为几乎每个数据库操作调用存储过程。其中一些存储过程还包含相当数量的域逻辑。每个域实体的数据访问逻辑驻留在域类本身中。即,域逻辑和数据访问逻辑之间没有解耦。
我希望完成以下工作:
- 将域逻辑与数据访问逻辑解耦
- 让域模型持久化无知
- 在各个版本中逐步实现向 NHibernate 的过渡,一次重构 DAL 的各个部分(如果可以这么称呼的话)
这是我将单个类转换为 NHibernate 持久性的方法
- 为域类创建映射
- 为域类创建一个存储库(从通用基础存储库继承的基本 CRUD 操作)
- 在存储库中为旧 DAL 使用的每个存储过程创建一个方法(沿途进行一些重构以提取域逻辑)
- 修改消费者使用存储库而不是类本身的数据访问逻辑
- 删除旧的数据访问逻辑和存储过程
我遇到的问题是 #1 和 #4。
(#1) 如何映射没有 NHibernate 映射的类型的属性?
考虑一个带有 Address 属性的 Person 类(Address 是一个没有 NH 映射的域对象,而 Person 是我正在映射的类)。如何在不为地址创建整个映射的情况下将地址包含在人员映射中?
(#4) 在过渡期间我应该如何管理对旧数据访问逻辑的依赖?
域模型中的类利用了我希望删除的旧数据访问逻辑。考虑一个带有 CustomerId 属性的 Order 类。当 Order 需要有关 Customer 的信息时,它会调用 Customer 类中的 ADO.NET 数据访问逻辑。除了维护旧的数据访问逻辑直到依赖类被自己映射之外,还有什么选择?
【问题讨论】:
标签: vb.net nhibernate ado.net