代码之家  ›  专栏  ›  技术社区  ›  tQuarella

如何从现有的持久性逻辑逐渐过渡到NHibernate持久性逻辑ADO.NET持久性逻辑?

  •  0
  • tQuarella  · 技术社区  · 14 年前

    应用程序使用ADO.NET为几乎所有数据库操作调用存储过程。其中一些存储过程还包含大量的域逻辑。每个域实体的数据访问逻辑驻留在域类本身中。即,域逻辑和数据访问逻辑之间没有解耦。

    我希望实现以下目标:

    • 将域逻辑与数据访问逻辑解耦
    • 使域模型持久化
    • 在不同的版本中逐步实现到NHibernate的转换,一次重构DAL的各个部分(如果可以这么称呼的话)

    1. 为域类创建映射
    2. 为域类创建存储库(从通用基本存储库继承的基本CRUD操作)
    3. 在存储库中为旧DAL使用的每个存储过程创建一个方法(在过程中进行重构以提取域逻辑)
    4. 删除旧的数据访问逻辑和存储过程

    (#1)如何映射没有NHibernate映射的类型的属性?

    考虑一个具有Address属性的Person类(Address是一个没有NH映射的域对象,Person是我正在映射的类)。如何在人员映射中包含地址,而不创建地址的整个映射?

    (#4)在转换期间,我应该如何管理对旧数据访问逻辑的依赖关系?

    2 回复  |  直到 13 年前
        1
  •  1
  •   Michael Maddox    14 年前

    我会这样处理:

    1. 重构并将数据访问逻辑从域类移到数据层。
    2. 您不需要存储库,但如果需要,您当然可以创建一个存储库。
    3. 为每个域类创建一个NHibernate映射(有一些工具可以做到这一点)。
    4. 创建一个面向NHibernate的数据访问API,慢慢地替换存储过程数据层。

    第1步和第2步是最难的部分,因为听起来你有一个理想情况下永远不会发生的紧密耦合。前两步都不涉及NHibernate。在尝试交换数据层之前,您正严格地转向更易于维护的体系结构。

    交换数据层很困难。如果您有一个可靠的最小公分母数据层体系结构,那么就更容易了,但我并不建议您使用最小公分母方法来创建一个体系结构。松耦合是好的,但你可以走得太远。

        2
  •  0
  •   SOLOMON OLUWATOBI    13 年前

    在互联网上搜索更多的nhibernate电子书

    1. 重构并将域逻辑从存储过程移到数据层。(此步骤是可选的,但这样做肯定会使过渡更加平滑和容易。)
    2. 您不需要存储库,但如果需要,您当然可以创建一个存储库。
    3. 为每个域类创建一个NHibernate映射(有一些工具可以做到这一点)。
    4. 创建一个面向NHibernate的数据访问API,慢慢地替换存储过程数据层