我即将开始我的第一个DDD项目,我想知道Hibernate在多大程度上可以处理多态性以及后果是什么。
我注意到他们并没有使用抽象here来表达域,即使他们的flag语句类似于“free the domain”,“make real OO design”等等。这是因为他们想要一个非常简单的例子,或者由于某些原因他们不能这样做吗?
我知道Hibernate reposiories不能在接口级别使用。他们可以在抽象班级使用我相信,对吗?但是这种情况呢:
有一个域对象 A ,其中包含抽象域对象(不能是接口:() B 。有几种 B的实现在 A 中有类似“ addSomeB ”的方法。我想把 B 的混合子类放在那里。然后我能够存储这样的类并正确检索它?
也许有一些明显的场景,由于Hibernate的限制,OO设计不是很简单?
谢谢!
答案 0 :(得分:0)
Hibernate支持继承,请参阅http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch10.html
与您相反,我将继承标记为框架中的一个重要特征。我们成功地持久化了一个聚合,它有一个基类(实际上是接口),并且在扩展继承树中可能有十个不同的实现。
我知道Hibernate存储库不能在接口级别使用。他们可以在抽象班级使用我相信,对吗?但是这种情况呢:
您绝对可以在域模型中使用接口。我们做到了。我们有一个带接口的jar,还有更多带有实现的jar。
显然,由于接口没有实际值/内容,但实体本身(实现)确实(因为它包含内容),您需要在映射中映射实现 - 它工作正常。您仍然可以在服务中使用接口,甚至在您的存储库中 - 只需在方法签名中使用它们。