摘要: 背景企业需要“快速的”和“高质量的”交付应用,采用传统的三层架构+数据驱动开发可以带来快速交付,但是高质量视乎无从保证,这篇文章我谈谈我准备如何应对这种需求。思路CQRS + DDD + MDP(元数据驱动编程)看图解说从读和写的角度思考一些问题。UI层的编码量占据了整体的50%-80%(我自己的经验)之间。UI层的主要目的是展示,即读取。UI层团队的开发人数比例不符合他们的编码量(企业应该加大对UI层人才的投资和引进)。UI层团队的编码水平相对较差(我自己的经验,我见过好的UI人员,月薪2W)。UI层在代码级别相对容易抽象和重用(企业应用)。UI是用户关注的重点。写操作是实现读取的前提,(数 阅读全文
posted @ 2013-05-30 16:08 沙耶 阅读(554) 评论(0) 推荐(0) 编辑
摘要: 背景有些刚接触CQRS的朋友容易被Event Sourcing带到沟里去,其实CQRS和Event Sourcing没有直接的关系,本篇文章我就介绍一种不用Event Sourcing的CQRS。最简单的CQRS架构架构图关键思路一、Comamnd和Query采用完全不同的组织思路。二、Command执行后如果希望返回数据给UI,同步的使用Query进行查询。三、Command和Query采用一个数据库。代码示例下载地址:http://yunpan.cn/Q5bkD3wmVXBpv(访问密码:9c16)。运行效果主要代码TestDynamicQueryController.cs 1 using 阅读全文
posted @ 2013-05-30 12:48 沙耶 阅读(782) 评论(0) 推荐(0) 编辑
摘要: 背景小明和小强同时签出了源代码,如果小强先提交,那么提交成功是合理的,接着小明提交了修改,这时源代码服务器就会告诉小明有人在他读取之后做了修改,问他如何处理,源代码服务器会让小明把修改合并后再提交。这就是乐观锁策略,当然源代码服务也可以配置为悲观锁以避免并行修改。合理的规避并发修改是企业应用中不能回避的问题,但现实场景是,很多团队都回避这个问题。今天我介绍一下如何使用离线乐观锁处理并发修改。相关文章:再谈在线悲观锁、离线悲观锁、在线乐观锁和离线乐观锁。思路CAS:Compare And Swap,只有当要修改的值在我读取后没有被修改,才会被交换(修改)。CAS是多线程领域的术语,比如:无锁的环 阅读全文
posted @ 2013-05-30 11:16 沙耶 阅读(778) 评论(0) 推荐(0) 编辑
摘要: 背景系统会出现并发,上篇文章我介绍了如何使用“离线乐观锁”保证并发,离线乐观锁适合处理那些重新编辑成本不大的单据,如果某个单据用户花了10分钟进行编辑,提交时你告诉他出现并发了,他心里肯定会骂娘的,今天介绍的“离线悲观锁”就可以避免这种情况。思路小明签出了源代码,小强就不能签出了,我们目前的源代码系统就是用的这种悲观策略。实现核心代码离线悲观锁管理器接口 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Ta 阅读全文
posted @ 2013-05-30 11:14 沙耶 阅读(397) 评论(0) 推荐(0) 编辑