Repository与UnitOfWork引入

Repository与UnitOfWork引入

Repository是什么? 马丁大叔的书上同样也有解释:它是衔接数据映射层和域之间的一个纽带,作用相当于一个在内存中的域对象映射集合,它分离了领域对象和数据库访问代码的细 节。Repository受DomainObject驱动,Repository用于实现不属于DomainObject的自身相关的,但又受 DomainObject约束的业务。如CRUD操作就不是领域模型要关注的业务,但是领域模型最终要映射为数据关系保存到数据库中。一个领域模型要有对 应的Repository来处理与数据层衔接过程。但不是所有的DomainObject对Repository约束是相同的,可能这个领域对象没有对应 Repository删除操作,而别外一个却有,所以我们经常使用的泛型Repository<T> 是不合适的。但是为了代码简洁重用,大家根据实际情况还是使用了简洁的IRepository<T>接口,就像我们有时为了简单直接把 POCO当DTO或VO使用了。如果不引入Repository,我觉得没有必要实现DAL层,因为DbContext本身就是DAL层,然后只要为 DbContext定义好接IDAL接口从而必免与BLL层的耦合。从这里就可以看出Repository与DAL的区别,一个受域业务驱动出现的,一个 是出于解除耦合出现的。

UnitOfWork 工作单元,为了减少业务层频繁调用DbContext的SaveChanges同步数据库操作(将多个对象的更新一次提交,减少与数据库 交互过程),又要保证DbContext对业务层封闭,所以我们要增加一个对业务层开放的接口。想一想如果把SaveChanges的方法下放到每个 Repository中或者DAL中,那业务层在协调多个Repository事务操作时,就会频繁的写数据库。而分离了Repository中的所有 SaveChanges (或者撤销以及完成单元工作后销毁等操作)后,并通过接口在业务层统一调用,这样既大大提高了效率,也体现了一个完整的单元工作 业务。

时间: 2024-12-15 07:14:40

Repository与UnitOfWork引入的相关文章

Repository仓储 UnitofWork

Repository仓储 UnitofWork 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 本章我们来创建仓储类Repository 并且引入 UnitOfWork 我对UnitOfWork的一些理解  UnitOfWork 工作单元,对于这个的解释和实例,网上很多很多大神之作,我在这就不班门弄斧了,只是浅谈 一下个人理解,不一定对,希望大家指正: UnitOfWork 看了很多,个人理解就是 统一事务,在很多操作中我们可能是进行多项操作的,比如 同时保存两个表的数

MVC实用架构设计(三)——EF-Code First(1):Repository,UnitOfWork,DbContext

前言 终于到EF了,实在不好意思,最近有点忙,本篇离上一篇发布已经一个多星期了,工作中的小迭代告一段落,终于有点时间来继续我们的架构设计了,在这里先对大家表示歉意. 其实这段时间我并不是把这个系列给忘记了,而是一直在思考,想着接下来应该怎么写.因为园子里已经有很多非常优秀的EF的文章了,比如: Entity Framework Code First 学习日记 [译著]Code First :使用Entity. Framework编程 Entity Framework技术系列 EF框架step b

【无私分享:ASP.NET CORE 项目实战(第五章)】Repository仓储 UnitofWork

目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 本章我们来创建仓储类Repository 并且引入 UnitOfWork 我对UnitOfWork的一些理解  UnitOfWork 工作单元,对于这个的解释和实例,网上很多很多大神之作,我在这就不班门弄斧了,只是浅谈 一下个人理解,不一定对,希望大家指正: UnitOfWork 看了很多,个人理解就是 统一事务,在很多操作中我们可能是进行多项操作的,比如 同时保存两个表的数据,如果我们先保存一个表(SaveChanges

关于 Repository和UnitOfWork 模式的关系

本以为,关于这方面的理解,园子中的文章已经很多的了,再多做文章真的就“多做文章了”,但是最近发现,还是有必要的,首先,每个人对于同一事物的理解方式和出发点都是不同的,所以思考的方式得到结果也是不同的.另外鉴于网友 @白细胞 的需求,需要对这方面的理解,索性写写,时间有些紧张,所有拖了两天,抱歉. 首先,在此说明,本人从未有人教过,也没有在公司的项目中使用过这些内容,原因很简单,ZF的东西,用不到这些,实属无奈直觉,而本人却相当,甚至放荡的喜好这些东西,曾经~~不知道怎么就明白了,实属不想知道,但

Repository,UnitOfWork,DbContext(1)

一.前言 终于到EF了,实在不好意思,最近有点忙,本篇离上一篇发布已经一个多星期了,工作中的小迭代告一段落,终于有点时间来继续我们的架构设计了,在这里先对大家表示歉意. 其实这段时间我并不是把这个系列给忘记了,而是一直在思考,想着接下来应该怎么写.因为园子里已经有很多非常优秀的EF的文章了,比如: Entity Framework Code First 学习日记 [译著]Code First :使用Entity. Framework编程 Entity Framework技术系列 EF框架step

Repository、IUnitOfWork

Repository.IUnitOfWork 在领域层和应用服务层之间的代码分布与实现 本来早就准备总结一下关于Repository.IUnitOfWork之间的联系以及在各层中的分布,直到看到田园里的蟋蟀发表的文章:<DDD 领域驱动设计-谈谈 Repository.IUnitOfWork 和 IDbContext 的实践>,才觉得有必要发表一下我个人的观点及其相关的实现代码,当然我的观点不一定就比他们的好,我只是表达个人观点而矣,大家勿喷. 关于Repository可以看看DUDU的这篇文

从Entity Framework的实现方式来看DDD中的repository仓储模式运用

一:最普通的数据库操作 static void Main(string[] args) { using (SchoolDBEntities db = new SchoolDBEntities()) { db.Students.Add(new Student() { StudentName = "nihao" }); db.SaveChanges(); } } domain 和 db 是怎么操作... DbSet<Student> 集合 [用于存放集合] 从名称中可以看出,是

maven夹包引入的速度问题

Maven的依赖库查询顺序更改为:    在 Maven 本地资源库中搜索,如果没有找到,进入第 2 步,否则退出.    在 Maven 中央存储库搜索,如果没有找到,进入第 3 步,否则退出.    在java.net Maven的远程存储库搜索,如果没有找到,提示错误信息,否则退出. 解释如下: 也就是说,当我们在pom.xml文件中配置了要引用的夹包之后,然后update下项目, 1:maven开始自动扫描本地库----就是我们在电脑上安装maven时,在setting.xml文件中配置

Repository、IUnitOfWork和IDbContext

DDD 领域驱动设计-谈谈Repository.IUnitOfWork和IDbContext的实践 上一篇:<DDD 领域驱动设计-谈谈 Repository.IUnitOfWork 和 IDbContext 的实践(1)> 阅读目录: 抽离 IRepository 并改造 Repository IUnitOfWork 和 Application Service 的变化 总结三种设计方案 简单总结上篇所做的两个改进: 从 Repository 和 UnitOfWork 中抽离出 IDbCont