关于实体域对象
我只是不清楚是否应该只要有关联就包含他,这样实体模型会很大,而且并不一定在每个业务中都能应用到所有的属性。最正确的做法是什么啊?
>关联是必须的不能删减
这个不是完全正确的,高聚合 低关联是设计原则,只要能够区分出关联和聚合的微妙区别,我们就可以留下聚合,剔除关联,Evans DDD认为不必要关联就不要,双向关联必须杜绝,有人曾经搞了一个大系统几百个光头模型,这说明,关联只要分析到位,可以去除的。
首先通过Evans DDD设计出实体对象,以及他们之间的关联关系;然后使用Hibernate进行编程实现这些实体对象和他们关联关系的持久化。
借鉴Hibernate这些o/R mapping做法,我们使用JDBC也可以实现,而且实现效率肯定比Hibernate高。
例如:Hibernate为了提供1:N的性能(减少其内部JDBC执行次数),它建议1:N要双向关联,而Evans DDD设计原则是少用双向关联,这就矛盾了,是服从HIbernate还是Evans DDD?当然是DDD,但是性能不能照顾,所以,使用Hibernate后,必须使用双向关联配置。
而使用JDBC,则就可以做到纯净地服从Evans DDD的对象设计原则,而不必因为技术性能原因,曲改设计原则,这就是Evans最近谈话中强调:需要让开发人员专心业务设计,而实际现在很多技术平台如Java,因为考虑性能原因,经常需要在设计和性能之间做平衡,这是当前技术发展水平的局限。