博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lind.DDD.UoW~方法回调完成原子化操作
阅读量:7249 次
发布时间:2019-06-29

本文共 2090 字,大约阅读时间需要 6 分钟。

本文来自于实践中的不足

在最近开始过程中,遇到了一个问题,之前设计的工作单元UoW只支持Insert,Update,Delete三种操作,即开发人员可以将以上三种操作同时扔进工作单元,由工作单元UoW负责事件的处理,这种设计已经出现很多年了,大叔感觉也是不错,思路就是在工作单元里添加三个字典对象,用来存储你的Insert,Update,Delete操作,然后在commit时,统一进行提交!

业务中完成的体现

在调试中,集成了select方法,即当添加,更新之后,你把最新数据拿到,并进行下一个业务的操作,这个过程中,拿数据也需要在事务中完成,而之前的设计是不支持这个功能的,可以说是个缺陷,本讲主要是解决了这个问题,在业务层,可以使用嵌套的注入来表示,代码一段如下:

     uow.RegisterChangeded(entity, SqlType.Insert, repository, (newEntity) =>            {                var old = repository.GetModel().FirstOrDefault(o => o.ID == entity.ID);                old.DataCtrlName = "Name|Email";                uow.RegisterChangeded(old, SqlType.Update, repository);            });            uow.Commit();

从上面代码中,我们看到了,在Insert方法里,有一个GetModel(),然后对实体进行赋值后,又调用了Update,这样就形成了一个Insert与update的嵌套,这里是使用了工作单元的嵌套.

对UoW的注册方法的修改

     ///         /// 注册数据变更实体        ///         /// 实体类型        /// SQL类型        /// 仓储        /// 方法回调        public void RegisterChangeded(            IEntity entity,            SqlType type,            IUnitOfWorkRepository repository,            Action
action = null) { switch (type) { case SqlType.Insert: insertEntities.Add(entity, new Tuple
>(repository, action)); break; case SqlType.Update: updateEntities.Add(entity, new Tuple
>(repository, action)); break; case SqlType.Delete: deleteEntities.Add(entity, new Tuple
>(repository, action)); break; default: throw new ArgumentException("you enter reference is error."); } }

工作单元字典添加委托元素

private IDictionary
>> insertEntities; private IDictionary
>> updateEntities; private IDictionary
>> deleteEntities;

下面是程序运行后的截图,我们可以看到,整个过程是在serializable级别的事务里的,即最高的事务级别!

对于知识的总结与研究很重要,有时,我们对一个事物一定要有较真的精神,我经常这样对我儿子说,学英语,一定要较真

感谢各位的阅读!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
Vyatta设置
查看>>
Redis核心解读–集群管理工具(Redis-sentinel)(转)
查看>>
删除排序数组中的重复元素java实现
查看>>
com.android.tools.fd.runtime.BootstrapApplication
查看>>
[7/N] 论得趣
查看>>
操作DOM
查看>>
amoeba数据库中间件透明实现MYSQL读写分离
查看>>
gradle入门
查看>>
对string类型的扩展
查看>>
gogoprotobuf使用(上)
查看>>
IOS开发—IOS 8 中设置applicationIconBadgeNumber和消息推送
查看>>
HBase–调优篇
查看>>
word的多级列表&自动编号
查看>>
SSH之密钥登陆
查看>>
vmware5.1通过模版部署RHEL6.3之后网卡eth1 修改eth0 的问题
查看>>
批量上传公钥到Linux服务器
查看>>
关于日立存储更换故障硬盘
查看>>
Subversion+Apache 安装配置文档
查看>>
从程序员到技术领导者
查看>>
squid的配置及应用
查看>>