是否可以在不改变作为框架一部分的 DDD 模型的情况下使用 NHibernate

2024-05-20

我挖掘了很多关于DDD方法(无处不在的语言、聚合、存储库等)我认为,与我读到的很多内容相反,实体应该有行为而不是不可知论。我看到的所有例子都倾向于呈现实体虚拟自动属性 and an 空构造函数(受保护或最糟糕的是公开)就是这样。我认为这种对象更像是 DTO,而不是实体。

我正在处理创建一个框架及其特定的 API,我不想绑定到 ORM。因此,我首先构建了域(不考虑持久性),现在我想使用 NHibernate 作为持久性工具,因此我在当前的解决方案中添加了一个新项目,以帮助确保我的模型不会更改以支持 NHibernate。该项目应该是我域内抽象存储库的实现。现在困难出现了。

Since 这是我第一次使用 NHibernate(我也在尝试 Fluent Nhibernate,但它似乎更具限制性)我想知道:

  1. 是否可以在不改变作为框架一部分的 DDD 模型的情况下使用 NHibernate
  2. NHibernate 按预期高效工作所必需的东西(约束)(虚拟属性、空构造函数等)我认为这个列表对很多开始学习 NHibernate 的人会有帮助。

请记住,我正在构建一个框架,因此开闭原理 http://en.wikipedia.org/wiki/Open/closed_principle对我来说非常重要。

P.S.:抱歉,如果我的英语不好,我来自蒙特利尔,我说法语。

Edit 1:这是我现在使用 NHibernate 时遇到的一个问题 -如何使用 Nhibernate(和 Fluent NHibernate)映射类型 https://stackoverflow.com/questions/1516752/how-to-map-type-with-fluent-nhibernate


  • For NHibernate:
    • 所有映射的类都需要一个默认(无参数)构造函数。默认构造函数不必是公共的(它可以是私有的,这样它就不是 API 的一部分),但它必须存在。这是因为 NHibernate 必须能够创建映射类的实例而不传递任何参数。 (有解决方法,但不要这样做。)
    • 必须标记需要延迟加载的所有映射属性virtual。这包括所有引用属性和所有集合属性。这是因为 NHibernate 必须能够生成派生映射类并覆盖映射属性的代理类。
    • 所有映射的集合属性都应使用接口作为属性类型。例如,使用IList<T>而不是List<T>。这是因为 .NET Framework 中的集合类型往往是密封的,NHibernate 必须能够用自己的集合类型实例替换集合类型的默认实例,并且 NHibernate 有自己的集合类型的内部实现。
    • 对于 NHibernate,更喜欢Iesi.Collections.Generic.ISet<T> to System.Collections.Generic.IList<T>,除非你确定你想要的实际上是list而不是一个set。这需要熟悉理论定义list and set以及您的领域模型的要求。当您知道元素必须按某种特定顺序排列时,请使用列表。

另请注意,交换对象关系映射框架通常并不容易,并且在许多情况下,当您拥有超出简单域模型的任何内容时,这是不可能的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在不改变作为框架一部分的 DDD 模型的情况下使用 NHibernate 的相关文章

  • 如何将JS/CSS文件包含到Slim框架的模板中?

    我正在使用 Slim 框架开发一个简单的网络应用程序 我遇到了一个可能很简单的问题 我想将静态文件 CSS 和 Javascript 包含到我的模板中 我的项目文件夹结构如下 index php lt where all the routi
  • NHibernate IQueryable 集合作为 root 的属性

    我有一个根对象 它有一个集合属性 例如 I have a Shelf object that has Books Now public class Shelf public ICollection
  • 用于桌面数据库应用程序的 Python 框架

    是否有一个框架可以为Python开发桌面数据库应用程序 一些带有CRUD屏幕的屏幕 我正在寻找类似于 Windows 窗体的东西 能够将 TextField Combos 和其他 UI 隐喻与datasets连接到关系数据库例如 MySQL
  • 最好的 NHibernate 二级缓存提供程序是什么?

    我见过有很多这样的 NCache Velocity 等等 但我还没有找到比较它们的表格 考虑以下标准什么是最好的 容易明白 最近正在维护中 是免费的或者有足够好的免费版本 Works 我无法说出什么是最好的或最差的 但我会分享我使用 NCa
  • Fluent NHibernate 实体 HasMany 不同子类类型的集合

    所以基本的鉴别器映射一切都运行良好 我可以直接与实体 A 和 B 交互 没有任何问题 public class BaseType public class EntityA BaseType public class EntityB Base
  • 流畅的NHibernate并在需要多个连接的查询上过滤一对多关系?

    我最近开始使用 NHibernate 但在实现下面概述的域模型时遇到了一些问题 我正在寻找一种方法来过滤项目与其特定数据存储上的项目数据集合之间的关系 数据存储要么是全局的 在这种情况下它们总是被返回 要么是特定于用户身份的 基于应用程序实
  • NHibernate 将多个表映射到一个类

    在我的旧数据库中 我遇到这样的情况 TableA id A PK cod A TableB id B PK cod B id A FK TableC id C PK cod C id B FK 由于多种原因 我需要将这些表映射到单个类中 本
  • 框架链接错误,找不到图像?

    我在我的应用程序中使用 DarwiinRemote 的 WiiRemote framework 我已经通过下载源代码并要求垃圾收集以及针对 10 5 进行构建来修复了一些问题 但是 当我尝试将其添加到我的项目时 我收到控制台错误 dyld
  • linq查询的问题

    我正在尝试使用 linq to NHibernate 使用 Fluent NHibernate 但我在 linq 查询方面遇到问题 每次我尝试执行它时 我都会收到以下消息 方法 get IsReadOnlyInitialized 类型 NH
  • NHibernate.Linq 类似

    如何使用 NHibernate Linq 生成此查询 WHERE this Name LIKE p0 p0 test Notice NO wild card 请注意 这不是 Linq To Sql 或实体框架 这就是 NHibernate
  • EF 6:映射复杂类型集合?

    EF 6 代码优先 是否支持复杂类型集合 值对象集合 映射 我知道它支持复杂类型 但还没有找到我们拥有复杂类型集合的示例 例如 假设您有一个名为 Student 的实体 其中包含联系人集合 对于 NH 我可以简单地说 Student 有一个
  • NHibernate QueryOver SQLFunction in where 子句

    我想查询一个具有多行的表 每行都有一个timestamp数据每隔十分钟出现一次 我想找到任何丢失数据的开头 即没有timestamp等于接下来的十分钟间隔 如下所示 select a timestamp from table as a wh
  • NHibernate 在生产中很少会抛出违反主键异常,无法用测试用例重现

    试图弄清楚这个问题 对我来说 这似乎不可能 我的服务器报告在繁忙的服务器上每天发生一次或两次以下错误 PlaylistItem create System Data SqlClient SqlException Violation of P
  • NHibernate 对单个属性的更新会更新 sql 中的所有属性

    我正在 NHibernate 中对单个属性执行标准更新 然而 在提交事务时 sql 更新似乎设置了我映射到表上的所有字段 即使它们没有更改 这肯定不是 Nhibernate 中的正常行为吧 难道我做错了什么 谢谢 using var ses
  • 在 Xcode 3.2 中使用第三方框架时出现问题

    我正在尝试使用第三方库 MPOAuthConnection 设置自己的项目来连接到 oauth REST API 到目前为止我已经完成的步骤 下载 MPOAuthConnection 的源代码 构建源代码并在 产品 选项卡中生成 MPOAu
  • DDD 和 SOA 真的可以很好地协同工作吗?

    如果我完全破坏了 DDD 概念 请轻轻地告诉我 但这就是我的困境 假设我有以下域模型 Teacher IList
  • 如何从 Windows 10 卸载 .net Framework 4.8

    我安装了 Windows 10 和 net Framework 4 7 2 并且我的程序运行良好 然后我想尝试一下 net Framework 4 8 安装后 我的程序无法运行 我试图卸载 net Framework 4 8 我从控制面板进
  • NHibernate QueryOver<> - SubQuery 上的聚合函数

    如何使用 QueryOver 语法编写以下 SQL 语句 SELECT COUNT FROM SELECT FirstName LastName FROM People GROUP BY FirstName LastName as sub
  • 当今最常用的跨平台移动应用程序开发框架是什么?

    我和这里的许多其他人一样 在移动世界迈出第一步时不知道从哪里开始 嗯 我在这里看到了一些关于移动开发框架或 sdk 的帖子 但所有这些都是针对特定目的的 例如 Web 客户端 小部件 html 开发等 我真正想知道的是 在目前市场上的所有选
  • ASP.NET MVC 应用程序中的工作单元模式

    我一直在看这个优秀的blog http www nhforge org wikis patternsandpractices nhibernate and the unit of work pattern aspx标题为 NHibernat

随机推荐