|
|
1
10
我想说的是,和大多数事情一样,这是一个滑动比例。我们制造的一些东西希望具有持久性。在规模的一端,这个东西拥有所有的胆量、依赖性和代码,这些都是定制构建的,以便以特定的方式持久化这个东西。在天平的另一端,一些事情奇迹般地发生了,我们所做的只是添加一个标记或在某个地方设置一个属性,从而导致事情“持续”。为了达到规模的神奇一面,有一些框架、设计指南、惯例等帮助神奇发生。我想你可能会争辩说,可以生产一种比NHibernate要求和限制更少但追求相同目标的工具;这一假设性工具将在我们的规模上更进一步。 我不知道我这么喜欢“坚持无知”这个词;它实际上是关于一个对象不知道实现、备份存储、缓存之类的东西——尽管对象通常知道它是否是持久的。但这只是语义学。 |
|
|
2
7
这个 问题在于 leaky abstractions . 很简单,现有的技术使它 非常 难以实现真正的PI。 |
|
|
3
4
添加ID字段,用属性装饰,从ORM类继承,必须设计类,使它们能够很好地映射到RDB中的底层表,所有这些都会将“PI分数”降低到100%以下。 也就是说,我选择使用Fluent NHibernate自动映射,因为它似乎是我看过的所有ORM选项中PI得分最高的。 |
|
|
4
3
持久性无知类是一个不与持久性框架绑定的类。 也就是说,该类完全不知道存在一个持久性框架,它不继承由该框架定义的类,也不实现该持久性框架工作所需的接口。 |
|
|
5
1
|
|
|
6
0
尽管任何给定的持久性忽略框架都可能需要某些较小的约束,但持久性忽略仍然存在。 虽然域模型中的类(使用NHibernate透明持久化)必须具有无参数构造函数,以便可以“动态”构造它,但不要求它具有框架指定的特定基类,也不要求它具有或重写特定框架指定的方法。 |
|
|
7
0
在我看来,“持久性无知”是您的模型(域模型、业务模型或您可能称之为的任何模型)的一个属性。该模型不知道持久性,因为它通过抽象(有时称为存储库)检索它所包含的实体的实例。这些抽象 可以通过直接使用ORM来实现,但当您陈述自己时,这有时可能会向不属于您的模型的对象添加需求。因此,我不会说遵守特定ORM的某些要求的模型是100%不知道持久性的。 |
|
|
8
0
当您要持久化域对象时,可以使用域类或持久化中的应用程序和POCO类来实现持久化,将其映射到持久化类中,并使用持久化对象与NHibero other framework一起存储 您的域类必须忽略信息是如何持久化的,因此您不能包含持久化框架的任何规则,如(空构造函数、虚拟属性等) 这些持久性框架规则可以在持久性类中。 |
|
|
user384884 · Dapper返回零guid 2 年前 |
|
|
qanqanqan · 如何在Django ORM中通过最大值获取对象 2 年前 |
|
|
Kirill · Django RawSQL注释字段 2 年前 |
|
|
nepko · Django将字符串过滤为整数? 2 年前 |
|
|
Emirhan Ay · 用实体框架建立两个实体之间的关系 2 年前 |