【发布时间】:2009-05-29 15:41:03
【问题描述】:
这在概念上与我的问题 here 有关。但是,我一直在玩 NHibernate,并意识到我的问题的真正核心是什么。
在经典的 OO 设计中,为了正确封装数据,将值传递给对象的构造函数并存储在数据成员(字段)中是一种常见模式。那些应该不被更改的值仅通过访问器(只读属性)公开。那些允许更改的有访问器和修改器(读写属性)。在我看来,适当的 O/RM 应该尊重这些约定,并在创建对象时使用可用的构造函数。依赖读写属性、反射或其他骇人听闻的(恕我直言)方法似乎……是错误的。
有没有 .NET O/RM 解决方案可以做到这一点?
编辑
为了解决 Praveen 的观点,我知道有些项目具有用于选择构造函数的“默认”算法 - 例如,StructureMap 始终使用具有最多参数的构造函数,除非您标记具有自定义属性的构造函数。我可以看到这是处理这种情况的有效方法。也许使用 IoC 容器除了 ORM 会提供我需要的那种解决方案 - 尽管在我看来这虽然不是天生的坏事,但对于使用 ORM 来说是一个不必要的额外步骤.
【问题讨论】:
-
还有一个有趣的问题:构造函数可以包含一些业务逻辑吗? IE。当我创建类 A 的实例时,它的构造函数可以创建持久类 B 的实例并将其分配给具有私有设置器的属性。
-
@Alex:我的目标是让域对象对持久性无知。从域对象创建持久对象的逻辑违反了这一点,并将域对象与持久方法紧密耦合 - 另一个坏事。