PolyBloodyHardReuse- -| 回首页 | 2004年索引 | - -有点开窍了

谁能给我一个DDD的例子?- -

                                      

下午Jacques Lebrun帮忙找到了Domain Driven Design,还没来得及看。Martin Fowler说应该由Domain Model负责访问持久化逻辑,并借助Data Mapper封装持久化的实现细节。但是,我竟然找不到这样的一个例子。Spring JPetstore细看之下原来也是Transaction Script,只不过service的方法都非常非常简单,前天乍一看还以为和我们做的Transaction Script有什么不同呢。看JPetstore唯一的收获是:不要使用DTO,用轻量级持久化框架(例如Hibernate或者iBatis),直接把实体对象到处传。
 
Domain Model模式看了仍然是半懂不懂,很多细节上的问题想不清楚。比如说,领域对象(或者说,实体)的创建和查找(对应于DAO的create方法和load方法)由谁来调用?仍然在service里调用吗?如果要放到实体类,在创建/查找操作之前,没有一个具体的实体对象存在的,那么就只能放在一个static方法里了,这是一个好的做法吗?
 
到哪里可以找到一个Domain Model体系结构的例子?我想看看究竟应该怎样去做。如果到明天晚上还没有进展,我就写信去问Martin Fowler本人。

- 作者: gigix 2004年05月23日, 星期日 19:03

Trackback

你可以使用这个链接引用该篇日志 http://publishblog.blogdriver.com/blog/tb.b?diaryID=168486

回复

- 评论人:Windy

Mon May 24 20:09:22 CST 2004  作者Blog

领域对象(etc.)调用finder调用mapper调用领域对象的构造函数创建原来已经存储在数据库里的领域对象,看起来好像是绕口令,实际上可以这么做,如果你真的想用DomainModal+DataMapper的话 :P

- 评论人:partech

Mon May 24 13:31:58 CST 2004  作者邮箱  作者Blog

领域对象(或者说,实体)的创建由业务控制对象,其他领域对象创建或者在查找时自动创建。
领域对象的查找同样可以由业务控制对象,其他领域对象或者其他查找方法调用。
服务层最好调用业务控制对象,而不是直接调用实体对象。
DDD里面的Repository可以回答你余下的问题。


- 评论人:potian

Mon May 24 03:05:15 CST 2004 

我没有仔细看过P of EAA ,也没有仔细看过DDD,所以不知道我们说的是不是一回事。我已经好长时间不看书了,虽然当时一直跟踪着这两本书的每一章。和几年前动则引用别人的观点,心态上有很多变化。

个人粗略的感觉,POEAA有点江郎才尽的意思,DDD看起来有点观点不是很清楚,混合了分析模式和其他一些人的观点。



- 评论人:potian

Sun May 23 20:14:27 CST 2004 

模型不复杂的情况这样做就足够了,典型的CRUD

Sevice层在WEB应用中的作用特别明显,我以前很多桌面程序没有这样一个明显的service层,而如果只需要CRUD,DTO-》Service-》DTOFactory-》DAO就足够了,并且确实是最佳的方安。

但当模型复杂的时候,Service就需要通过模型来完成工作,或者从Service得到合适的领域对象,直接利用这些对象的行为进行操作

我在绍兴、兰亭玩


- 评论人:gigix

Sun May 23 20:05:35 CST 2004  作者邮箱 

但是OSUser和Delphi程序和web应用,我觉得有点不同,也说不上来究竟是哪里不同。恰恰是web应用,我发现好多人都是照我们现在这个做法来做的,比如spring jpetstore和appfuse。
今天下午本来想到你家去问你这个问题顺便蹭饭的,可惜你不在。

- 评论人:potian

Sun May 23 19:59:25 CST 2004 

gigix,不要这样大惊小怪好不好,这样的例子到处都是,譬如OSUser。或者我以前写过的任何一个delphi程序,或者我写过的任何复杂一点的程序

而事实上没有一个纯粹的什么Domain或者纯粹的Transaction Script,(我对这些名词越来越讨厌了),很多时候需要混合,  譬如service-》model-》〔Manager〕DAO,或者是直接的service-》manager-》DAO


评论内容: