实在有些晕了,关于领域模型和ORM的关系 2008-05-22 cscs31 这几天对领域模型有了些认识,也拜读了一些文章和书籍,但是有个实际的问题不太知道应该怎么设计?类似于Hibernate这种ORM得到的Object是不是可以作为领域模型中的实体模型?这个Mapping出来的object是属于哪一层?还是领域模型中的实体模型是一层,ORM的结果出来的Object是另一个层次?这两层之间再做映射?谢谢大家!谢谢Banq了[该贴被cscs31于2008-05-22 22:12修改过]
banq 2008-05-26 11:10 >类似于Hibernate这种ORM得到的Object首先这个问题本身就有问题,Object不是Hibernate这种ORM得到的输出结果,而是它的输入,是ORM得到DB,不是ORM得到Object。 领域模型 ---> ORM -----> DB
freebox 2008-05-26 12:04 楼上正解,如果在改造遗留系统,即使有了ORM工具,仍然很难通过简单的反向工程取得有价值的领域对象。我个人认为Hibernate这样的工具有用之处有两个,第一个是强调O,而不是R或M,要不咋不叫ROM,第二个是缓存。
cscs31 2008-05-26 17:01 先感谢banq的回复:)明白banq的意思,确实是先有的object,那么这个Object可以做为Hibernate的输入类?一个新想到的问题,在hibernate中支持两种Mapping的模式,一种是Annotation的方式和xml配置的方式,我个人觉得如果第一个问题成立,是不是应该使用xml配置的方式,我感觉Annotation的方式好像把业务领域模型和ORM混在一起了。是否正确,还请banq指教。[该贴被cscs31于2008-05-26 17:03修改过]
freebox 2008-05-26 17:40 我认为Annotation只是形式,定义好的Entity在去掉这些注释之后仍然是有价值的,Annotation方便了开发,您可以在结束时换回hbm。但我看不出使用Annotation有什么不好。即使有侵入也是在注释级别的,在类属性和关联关系方面和hbm没有什么差别。碰到不需要持久的东西也可以用@Transient(拼错没有?)注释。
cscs31 2008-05-26 21:36 我承认annotation是在开发的时候比较方便,但是在jdon里也看到了一些对它的反对声,sun认为应该用于表达一些元数据,我感觉这里的hibernate的annotation似乎只是起了代替xml的作用,而我觉得这些xml是另一层的东西,所以才有了此疑问。
banq 2008-05-27 12:05 Annotation我现在是中立,在某些时候还是不错的,老外在这方面也有争论:http://www.jdon.com/jivejdon/forum/messageList.shtml?thread=22356&message=23114849#23114849
xmuzyu 2008-11-17 10:17 楼主,如果用DDD思考,hibernate ORM仅仅是为领域模型服务的,ORM的职责是持久化领域模型。领域模型属于业务层,而ORM实现类(比如具体的仓库实现类)属于持久层。