迷惑,求解--ORM实体于领域实体之间的关系
前提:
问题:究竟如何处理领域模型实体和ORM实体之间的关系
简介:(1):不管怎么样ORM的便利性是一种趋势,DDD中使用ORM貌似非常常见,那么如何处理DDD领域模型实体和ORM实体之间的关系呢?
(2):来个实例:需求:需要维护一批产品,能够即时的列出某一类产品的数量,价格之类的.那么根据这个需求,我们分析:领域对象:(1):产品(2):产品类别 那么在先是产品的时候肯定需要列出产品的类别名称.我如何处理这种情况.
首先搞清楚先来后到,注意,这个先来后到不是大家接受的先来后到,大家可能先听到ORM Hibernate,现在才知道领域模型实体。
而在软件中,领域模型实体是直接来自需求,这个领域模型实体是否需要保存持久到硬盘不丢失,是技术因素,所以,领域模型是先,而ORM的实体是后。
DDD也对是否选用ORM也提出指导意见,在当前NoSQL运动背景下,我们可以根据CAP定律和BASE思想,对ORM也可以选择,用或不用,JPA是JavaEE 6的核心,所以,我们对所谓JAVA EE也是有选择权的。
>先是产品的时候肯定需要列出产品的类别名称
建立产品实体和类别的高聚合关联,在代码实现上,就是产品中有一个字段属性引用了类别,但产品显示时,可以通过getCategory获得其类别,然后显示类别名称。
如果类别相当多,可以直接向Repository查询获得。
呵呵,这个DDD没有具体规定,我个人实践是:不做DTO或所谓VO,对象太多,增加复杂性,一旦领域对象一变,修改面辐射大,在Jdon框架中,就直接由领域对象提将自己交给UI或Repository。
当然,你可以在领域对象中做一个方法,将自己的一部分属性或值打包成值对象交给UI和Respository。
我个人认为:ORM在DDD实践中非常碍手碍脚,设计一个模型有三个因素需要考虑:模型是否符合需求?模型是否符合ORM机制?模型是否能真正通过ORM实现数据库保存?
这三个问题足够让任何一个聪明人精神崩溃,所以,受Domain Events启示,将Domain层和技术架构彻底分离,也就是将模型和ORM 持久机制等彻底分离。
如果使用Neo4j这样内存KVS比ORM要降低开发难度,就不要考虑模型需要讲究ORM机制,也不用考虑是否持久等等底层问题,大大降低负担。
NEO4J 独特的NoSQL graph数据库
所以,Qi4j这样DDD框架直接使用NEO4j替代ORM作为持久层,这是一个革命性跳跃,是我们摆脱关系数据库的中世纪黑暗的一个跳跃。