- 作者: gigix 2004年05月23日, 星期日 19:03
你可以使用这个链接引用该篇日志 http://publishblog.blogdriver.com/blog/tb.b?diaryID=168486
领域对象(etc.)调用finder调用mapper调用领域对象的构造函数创建原来已经存储在数据库里的领域对象,看起来好像是绕口令,实际上可以这么做,如果你真的想用DomainModal+DataMapper的话 :P
领域对象(或者说,实体)的创建由业务控制对象,其他领域对象创建或者在查找时自动创建。
领域对象的查找同样可以由业务控制对象,其他领域对象或者其他查找方法调用。
服务层最好调用业务控制对象,而不是直接调用实体对象。
DDD里面的Repository可以回答你余下的问题。
我没有仔细看过P of EAA ,也没有仔细看过DDD,所以不知道我们说的是不是一回事。我已经好长时间不看书了,虽然当时一直跟踪着这两本书的每一章。和几年前动则引用别人的观点,心态上有很多变化。
个人粗略的感觉,POEAA有点江郎才尽的意思,DDD看起来有点观点不是很清楚,混合了分析模式和其他一些人的观点。
模型不复杂的情况这样做就足够了,典型的CRUD
Sevice层在WEB应用中的作用特别明显,我以前很多桌面程序没有这样一个明显的service层,而如果只需要CRUD,DTO-》Service-》DTOFactory-》DAO就足够了,并且确实是最佳的方安。
但当模型复杂的时候,Service就需要通过模型来完成工作,或者从Service得到合适的领域对象,直接利用这些对象的行为进行操作
我在绍兴、兰亭玩
但是OSUser和Delphi程序和web应用,我觉得有点不同,也说不上来究竟是哪里不同。恰恰是web应用,我发现好多人都是照我们现在这个做法来做的,比如spring jpetstore和appfuse。
今天下午本来想到你家去问你这个问题顺便蹭饭的,可惜你不在。
gigix,不要这样大惊小怪好不好,这样的例子到处都是,譬如OSUser。或者我以前写过的任何一个delphi程序,或者我写过的任何复杂一点的程序
而事实上没有一个纯粹的什么Domain或者纯粹的Transaction Script,(我对这些名词越来越讨厌了),很多时候需要混合, 譬如service-》model-》〔Manager〕DAO,或者是直接的service-》manager-》DAO