我怎么 感觉 Repository是 负责 对象的创建和查询后对象的组装的呢......
为什么要替代Dao呢
总感觉他们的职责是不同的....
Dao只负责CRUD基本操作......而Repository则负责更复杂的对象的查询....可能需要Dao的支持....因而可以持有Dao的引用....可终究他们的职责是不一样的啊...
这个意思是Repository关联DAO配合完成操作,还是Repository职责就是DAO的职责?
而DAO则没有如此OO概念,DAO是Data access Object,DAO中有数据概念,还是没有摆脱数据库的影子。
所以,Repository替代DAO,是OO深入的趋势,但是在具体处理中,由于性能或设计不够周到或者一些事情把握不定,DAO还会继续存在一段时间,属于过渡式消失。
Repository和DAO两个概念比较中发现,Repository是相对对象而言,而DAO是相对数据库而言,只要我们还是使用关系数据库保存对象,也可能这两者都同时存在,因为侧重点不一样,但是可以肯定的是,业务层应该直接和Repository打交道,而不是DAO.
以上是我个人认识。
这个意思是不是DAO可以使用DAO缓存代理来提高性能,而Repository不可以直接使用缓存,因为Repository直接使用缓存会使业务层搞的复杂,所以有些要求高性能的设计时是使用Repository调用DAO的代理缓存?
一般情况下Repository有没有接口?
您认为的仓库是否有自己寻找对象的能力呢?
打个比方,当仓库被 new 的时候,他是不是要在数据库当中找寻自己的货物(指对象)呢。
然后提供给客户端寻找货物的一种方法或者多种方法。
仓库和工厂一般配合在一起使用,工厂用来创建对象,不过是从仓库中。
>这个意思是不是DAO可以使用DAO缓存代理来提高性能,而Repository不可以直接使用缓存
我认为对象缓存放在DAO中不合适,而是在Repository中,Repository=对象工厂+对象缓存+DAO 是这样一个组成。
JiveJdon3中将缓存放在DAO中现在觉得不恰当。以后会更改。
而Repository除了可以存取对象外,还应包括对对象的管理。
我个人认为:Repository = 对象的管理 + DAO。
对象的管理如:对象缓存,对象在Repository的状态等。
我总觉得从领域服务当中应该有对象工厂创建之后把它存入到Repository当中
比较优雅而且合乎情理。
你觉得呢?
但repository就不一样了,你可以清楚的,没有任何歧义的告诉他,我拿回来的是一批账单,并且所有与账单相关的东西都在这里了,他们更乐意听到这种他们听得懂的话。
DAO是对象访问接口类
接口类=方法的管理类
就是操作数据库的具体方法的类
User
UserDAOImpl 就是管理怎么把User对象存进取出数据库的具体方法的类
repository是对象仓库类
仓库类=对象的管理类
User
UserRepository 就是管理怎么样才能有效的访问User类的类
UserRepository在必要的时候才调用UserDAOImpl去操作数据库
你也可以吧UserRepository理解为UserCache,当然Repository不仅仅是cache的功能
简单的例子就是如果你有一个Model Object包含着一些Value Object,那么每个Object都回有相应的一个DAO,因为DAO都已经告诉你叫作Data access object,所以,每一个object都需要一个dao来做数据库等地层数据处理。
Reposirtory是对每一个Model Object来说的,一个Reposirtory基本上对应一个Model Object.
比如Person 包含一些Value Object比如address, work 等等,那么
Person就有一个Reposirtory,它里面有相关的方法比如,只是单纯的取出一个Person,然后Load相关的address和work在需要的时候,因为,有时候你不需要一次把所有的Value Object在一个Model Object提取的时候都一次性提出来,那样子叶增加系统负担也会造成资源浪费。
不知道明白了么?
还不明白?说白了就是Model Object有Reposirtory而Value Object没有,Value Object的基本操作可以用Dao而DDD有明确说明一般所有的对象操作都要面向的是Model Object。