域抽象和Hibernate现实

时间:2013-08-22 06:21:12

标签: hibernate oop domain-driven-design

我即将开始我的第一个DDD项目,我想知道Hibernate在多大程度上可以处理多态性以及后果是什么。

我注意到他们并没有使用抽象here来表达域,即使他们的flag语句类似于“free the domain”,“make real OO design”等等。这是因为他们想要一个非常简单的例子,或者由于某些原因他们不能这样做吗?

我知道Hibernate reposiories不能在接口级别使用。他们可以在抽象班级使用我相信,对吗?但是这种情况呢:

有一个域对象 A ,其中包含抽象域对象(不能是接口:() B 。有几种 B的实现 A 中有类似“ addSomeB ”的方法。我想把 B 的混合子类放在那里。然后我能够存储这样的类并正确检索它?

也许有一些明显的场景,由于Hibernate的限制,OO设计不是很简单?

谢谢!

1 个答案:

答案 0 :(得分:0)

Hibernate支持继承,请参阅http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch10.html

与您相反,我将继承标记为框架中的一个重要特征。我们成功地持久化了一个聚合,它有一个基类(实际上是接口),并且在扩展继承树中可能有十个不同的实现。

  

我知道Hibernate存储库不能在接口级别使用。他们可以在抽象班级使用我相信,对吗?但是这种情况呢:

您绝对可以在域模型中使用接口。我们做到了。我们有一个带接口的jar,还有更多带有实现的jar。

显然,由于接口没有实际值/内容,但实体本身(实现)确实(因为它包含内容),您需要在映射中映射实现 - 它工作正常。您仍然可以在服务中使用接口,甚至在您的存储库中 - 只需在方法签名中使用它们。