05 2013 档案
摘要:背景企业需要“快速的”和“高质量的”交付应用,采用传统的三层架构+数据驱动开发可以带来快速交付,但是高质量视乎无从保证,这篇文章我谈谈我准备如何应对这种需求。思路CQRS + DDD + MDP(元数据驱动编程)看图解说从读和写的角度思考一些问题。UI层的编码量占据了整体的50%-80%(我自己的经验)之间。UI层的主要目的是展示,即读取。UI层团队的开发人数比例不符合他们的编码量(企业应该加大对UI层人才的投资和引进)。UI层团队的编码水平相对较差(我自己的经验,我见过好的UI人员,月薪2W)。UI层在代码级别相对容易抽象和重用(企业应用)。UI是用户关注的重点。写操作是实现读取的前提,(数
阅读全文
摘要:背景有些刚接触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
阅读全文
摘要:背景小明和小强同时签出了源代码,如果小强先提交,那么提交成功是合理的,接着小明提交了修改,这时源代码服务器就会告诉小明有人在他读取之后做了修改,问他如何处理,源代码服务器会让小明把修改合并后再提交。这就是乐观锁策略,当然源代码服务也可以配置为悲观锁以避免并行修改。合理的规避并发修改是企业应用中不能回避的问题,但现实场景是,很多团队都回避这个问题。今天我介绍一下如何使用离线乐观锁处理并发修改。相关文章:再谈在线悲观锁、离线悲观锁、在线乐观锁和离线乐观锁。思路CAS:Compare And Swap,只有当要修改的值在我读取后没有被修改,才会被交换(修改)。CAS是多线程领域的术语,比如:无锁的环
阅读全文
摘要:背景系统会出现并发,上篇文章我介绍了如何使用“离线乐观锁”保证并发,离线乐观锁适合处理那些重新编辑成本不大的单据,如果某个单据用户花了10分钟进行编辑,提交时你告诉他出现并发了,他心里肯定会骂娘的,今天介绍的“离线悲观锁”就可以避免这种情况。思路小明签出了源代码,小强就不能签出了,我们目前的源代码系统就是用的这种悲观策略。实现核心代码离线悲观锁管理器接口 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Ta
阅读全文
摘要:流程 描述关键流程的概览图: 架构设计活动位于开发和需求的中间。虽然需求这个阶段主要是业务分析人员的责任,但是架构师也会参与这个活动的一些详细任务。随后,架构师在创建逻辑架构中首先创建一个大概的逻辑架构,这个时候不考虑技术因素。这步是从需求到物理架构的一个跳板。物理架构是需要考虑技术因素的。逻辑架构会做为逻辑详细设计执行的任何详细设计的输入。 在需求、逻辑架构、逻辑详细设计的基础上,架构师对这种架构凝练并最终产生物理架构。物理架构作为物理详细设计执行的任何详细设计的输入。物理详细设计会成为实现的基础。详细设计和实现并不是架构师的职责。但需要架构师在需要的时候为这些团队提供指导。 架构设...
阅读全文
摘要:一、Delegate委托可以理解为一个方法签名。 可以将方法作为另外一个方法的参数带入其中进行运算。在C#中我们有三种方式去创建委托,分别如下:public delegate void Print(string str); static void delegatemethod(string str) { Console.WriteLine(str); } public static void Main() { #region 委托 //1.普通委托 ...
阅读全文
摘要:题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。public class lianxi02{ public static void main(String[] args) { int count = 0; for (int i = 101; i < 200; i++) { boolean b = false; for(int j=2; j<=Math.sqrt(i);j++...
阅读全文
摘要:题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?//这是一个菲波拉契数列问题public class lianxi01{ public static void main(String[] args) { System.out.println("第1个月的兔子对数: 1"); System.out.println("第2个月的兔子对数: 1"); int f1 = 1, f2 = 1, f, M = 24; for (int i ...
阅读全文
摘要:ProblemDescription 威威猫不是一只普通的猫,普通的猫喜欢吃鱼,但威威猫最喜欢吃鸡腿。他每天都在不停的吃啊吃,吃了一只又一只鸡腿。现在他遇到了一个难题,如果他的体重太胖那么他的主人就不给他吃鸡腿了,所以他需要你的帮助。 威威猫的身体由n个器官构成,由于他的身体很特殊所以他的增长也很特殊(不要问为什么,喜欢吃鸡腿的猫已经够奇怪了)。他的增长有个k1和k2系数,而且每天的增长量和前一天有关,我们假设这n个器官在第i天的数值分别是a(i,1),a(i,2),a(i,3)……a(i,n),那么,第i+1天他每个器官的数值就会变成: a(i+1,1)=k1*a(i,1)+k2*a(...
阅读全文
摘要:语句:values current date;values current timestamp;
阅读全文
摘要:INT最大值是21亿,每天100万个事务,也够用58年。而且,你不可能存这么多条数据,而且是不断删除的。如果你还担心,可以用序列Sequence,BIGINT的,可以用到宇宙爆炸。下面的语句创建了自增长字段的表,自增长字段采用了BIGINT,足够大:create table TEST_ID (ID_COL BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY );
阅读全文