>DAO中只负责数据的存储也就是与数据库交互,并不设计业务逻辑的问题,所以如果CRUD操作不设计具体的领域逻辑

不能这么理解,在Repository情况下,DAO其实是多余的,Repository可以完全替代DAO。

以JiveJdon3打个比喻: ForumMessage中包含Forum和Forumhread,这三者是一致性,必须保持不变,在这个系统中必须同进同出,你通过Repository获得一个ForumMessage时,它必须将Forum和Forumhread从各自数据表中读取后,嵌入ForumMessage中,形成一个完整的一致的ForumMessage。

同理,你对ForumMessage进行修改时,也必须对其内嵌也就是高聚合的子对象Forum和Forumhread进行更新,CRUD都是要这样。在CRUD时,你不能单独对ForumMessage对应的数据表进行操作,这就破坏对象的不变性。

而DAO则没有这些规定,就是简单的数据访问封装,至于你是以数据库为中心的编程思路,还是以OO为中心,都不管,实际它更多带有数据库思路,所以我也是主张摒弃DAO的。

可以起名叫dao,三个字母怎么也比repository打着舒服。

我觉得dao是细粒度的对实体的操作,而仓库相对粗粒度。仓库在获得一个满足不变量的领域对象的时候,会调用比较细粒度的Dao来完成对领域对象的填充。

不知道理解是否对,还请各位道友指正,大家一起进步。