【问题标题】:Is nHibernate intended to replace database objects?nHibernate 是否打算替换数据库对象?
【发布时间】:2010-12-04 21:39:33
【问题描述】:

我还没有找到明确的答案并澄清一下:

使用 nHibernate 和 SQL Server,您是否希望忽略或将存储在存储过程、视图和触发器中的业务逻辑迁移到 HQL 或应用程序代码中?

【问题讨论】:

    标签: sql-server nhibernate stored-procedures business-objects


    【解决方案1】:

    NHibernate 是一个 O/R 映射器,非常适合使用“域驱动”方法构建的应用程序。
    在这样的应用程序中,域模型是业务的表达性面向对象模型。这意味着“模型”包含所有(或大部分)业务逻辑。
    在这种情况下,我很少看到(如果有的话)将业务逻辑放入存储过程的情况。

    【讨论】:

    • 这可以解释很多。我的任务是在现有数据库结构之上编写一个对象“层”,其中很多逻辑都包含在现有数据库对象中。
    【解决方案2】:

    好吧,抛开所有细节:是的。

    NH 是一种对象关系映射器,旨在与称为“领域驱动设计”的架构风格一起使用。它的一个重要方面是除了保存和加载数据之外,它完全不考虑数据库 - 这个概念被称为 Persistence Ignorance,它的座右铭是:没有数据库.

    从这个角度来看,将业务逻辑放在存储过程或其他一些数据库对象中不仅不受欢迎,而且显然会产生严重的代码异味。

    如果您遵循首选的领域驱动设计方法,那么将没有机会将业务逻辑放入数据库 - 仅仅是因为在构建业务层时没有任何数据库...

    【讨论】:

    • 我同意这一点,但要补充一点,NH 对存储过程和非 DDD 数据库有很好的支持,因此即使您现有的数据库不符合首选数据库,您也可以从使用它中受益风格。我们在使用多个数据库的应用程序中使用 NH 进行数据访问,其中一些是为 DDD 和 NH 构建的,还有一个是非常老派的。
    猜你喜欢
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多