内容来源于dudu的 关于Repository模式一文html
Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间。它的存在让领域层感受不到数据访问层的存在,它提供一个相似集合的接口提供给领域层进行领域对象的访问。Repository是仓库管理员,领域层须要什么东西只需告诉仓库管理员,由仓库管理员把东西拿给它,并不须要知道东西实际放在哪。数据库
1. Repository模式是架构模式,在设计架构时,才有参考价值; 架构
2. Repository模式主要是封装数据查询和存储逻辑; dom
3. Repository模式实际用途:更换、升级ORM引擎,不影响业务逻辑; 单元测试
4. Repository模式能提升测试效率,单元测试时,用Mock对象代替实际的数据库存取,能够成倍地提升测试用例运行速度。 测试
评估:应用Repository模式所带来的好处,远高于实现这个模式所增长的代码。只要项目分层,都应当使用这个模式。设计
关于泛型Repository接口(来源):htm
仅使用泛型Repository接口并不太合适,由于Repository接口是提供给Domain层的操做契约,不一样的entity对于Domain来讲可能有不一样的操做约束。所以Repository接口仍是应该单独针对每一个Eneity类来定义。 对象
泛型的Repository<T>类仍然用来减小重复代码,只是不能被UserRepository类直接继承,由于这样Delete方法将侵入User类,因此改成在UserRepository中 组合一个Repository<T>,将开放给domain可见且又能使用泛型重用的功能委托给这个Repository<T>blog
Repository与Dal的区别(来源):
Repository是DDD中的概念,强调Repository是受Domain驱动的,Repository中定义的功能要体现Domain的意图和约束,而Dal更纯粹的就是提供数据访问的功能,并不严格受限于Business层。
使用Repository,隐含着一种意图倾向,就是 Domain须要什么我才提供什么,不应提供的功能就不要提供,一切都是以Domain的需求为核心;而使用Dal,其意图倾向在于我Dal层能使用的数 据库访问操做提供给Business层,你Business要用哪一个本身选。换一个Business也能够用我这个Dal,一切是以我Dal能提供什么操 做为核心。