2013年4月26日

DDD:用 “四色原型” 进行 “职责分配”

摘要: 这篇博客是DDD:用 “四色原型” 进行 “聚合设计”的延伸版。职责分配聚合维护内部状态的一致性。换句话说,聚合的职责只限于维护期自身的状态。可以将聚合的职责分为两类:修改职责:只能修改聚合本身的状态,关联的其它聚合信息不能修改。读取职责:可以读取聚合本身的状态,关联的其它聚合信息也能读取。角色维护一个聚合实例业务逻辑的一致性。因为有些聚合实例的业务逻辑会依赖很多外部服务:如仓储、领域服务等。常见的场景如下:前置条件:修改内部状态时,必须满足的条件。唯一性验证:某些状态必须唯一。计算逻辑:此处多数采用状态模式或策略模式。领域服务维护多个聚合实例(跨聚合)业务逻辑的一致性。工厂维护聚合的创建逻辑 阅读全文

posted @ 2013-04-26 13:30 幸福框架 阅读(2944) 评论(4) 推荐(0) 编辑

DDD:用 “四色原型” 进行 “聚合设计”

摘要: 四色原型在企业应用的上下文中,四色原型是领域模型的一种原型,原型的意思是指领域中的任何模型及其关系都可以抽象为“四色原型”。四色原型可以用这句话进行描述:某个人(Party)的角色(PartyRole)在某个地点(Place)的角色(PlaceRole)用某个东西(Thing)的角色(ThingRole)做了某件事情(MomentInterval)。图片示意名词解释PartPlaceThing:简称PPT,用淡绿色表示,常见的PPT有:部门、岗位、人员、地点、物品等。Description:简称Des,用淡蓝色表示,主要用来对PPT进行描述,常见的Des有:部门类型、岗位层级、人员类型、地点区 阅读全文

posted @ 2013-04-26 07:02 幸福框架 阅读(13486) 评论(11) 推荐(9) 编辑

2013年4月25日

DDD:主键映射,你一直在使用的企业应用模式

摘要: 名称解释主键映射是为了保证一个业务事务(请求)内只访问或修改一份领域模型。基本的思路是在内存中维护一个映射表,映射表的键为领域模型的主键,值为加载的领域模型。工作原理如下:根据主键加载:先判断映射中有没有,有就直接从映射中返回,没有就从数据库加载,然后添加进映射再返回。根据查询加载:先从数据库加载所有满足条件的领域模型集合,然后遍历这个集合,用1的算法处理每个加载的领域模型,返回新的集合(集合.Map算法)。总之,主键映射会保证整个业务事务发生的过程你只会引用到一个内存引用,你自己实现主键映射也要保证这个语义。图片示意不用主键映射会出现什么问题?using System;using Micro 阅读全文

posted @ 2013-04-25 13:17 幸福框架 阅读(1842) 评论(2) 推荐(0) 编辑

设计原则:请重新审视“多重继承”,找机会拥抱一下“掺入(Mixin)”

摘要: 名称解释多重继承:我没有使用多重继承的经验,因此这里不多说,大学学的C++,可惜没有学好。Mixin:一个Mixin是一个方法和属性的集合,不同的语言提供的实现机制不一样。类型定义的时候可以声明他想包含的Mixin(可以是多个),这些Mixin包含的方法会成为类型的一部分。使用动机代码复用 AND 运行时不改变。Mixin是推论,MixinTarget是定理。如:C#的IEnumerable(MixinTarget)只包含一个方法,根据这个方法(定理)Enumerable(Mixin)扩展了N个方法(推论)。示例(ExtJs4.2) 1 /// <reference path=" 阅读全文

posted @ 2013-04-25 07:53 幸福框架 阅读(2640) 评论(0) 推荐(0) 编辑

2013年4月24日

ExtJS4.2:快捷键支持(没有你想象的那么简单)

摘要: 问题一个页面有两个面板,都有一个【添加(F2)】按钮,如何做快捷键支持?图片示意第一次实现感觉应该很简单,ExtJs提供了“Ext.util.KeyMap”,很容易做快捷键支持。代码示例 1 /// <reference path="Ext/ext-all-debug-w-comments.js" /> 2 3 Ext.onReady(function () { 4 5 var viewport = Ext.create('Ext.container.Viewport', { 6 layout: { 7 type: 'vbox', 阅读全文

posted @ 2013-04-24 06:59 幸福框架 阅读(4722) 评论(6) 推荐(4) 编辑

2013年4月23日

技术交流:2013-04-27 晚 8:00 自由交流 ESB

摘要: 时间:2013-04-27 晚 8:00形式:自由交流主题:ESB地点:广州海珠区 地铁8号线B出口 中大科技园B座503 (地铁出口车流方向第二座大楼)联系电话:13622248225联系人:段光伟来参加的朋友留个回复,回复内容:【要会去的】。 阅读全文

posted @ 2013-04-23 14:15 幸福框架 阅读(243) 评论(4) 推荐(0) 编辑

Javascript:必须知道的Javascript知识点之“this指针”

摘要: 很多人都知道this指针,这篇文章的主要目的是为了培训我们公司的新人。默认的this指针指向规则1this指针默认指向方法调用时为其指定的对象,如:obj.fun(),fun方法体中的this指针指向obj。1 var user = { name: '段光伟' };2 user.getName = function(){ return this.name; };3 user.getName(); //返回‘段光伟’1 var user = { name: '段光伟' };2 user.getName = function(){ return this.name; 阅读全文

posted @ 2013-04-23 07:31 幸福框架 阅读(2278) 评论(51) 推荐(2) 编辑

Javascript:必须知道的Javascript知识点之“单线程事件驱动”

摘要: 代码示例 1 var intervalBody = function(){ 2 console.log('interval'); 3 } 4 5 var startInterval = function(){ 6 setInterval(intervalBody,1000); 7 } 8 9 var timeoutBody = function(){10 console.log('timeout');11 }12 13 var startTimeout = function(){14 setTimeout(timeoutBody,1000);15 }16 1.. 阅读全文

posted @ 2013-04-23 07:31 幸福框架 阅读(1929) 评论(4) 推荐(1) 编辑

Javascript:必须知道的Javascript知识点之“字面量和对应类型”

摘要: 代码示例 1 var date1 = new Date(2013,1,1); 2 var date2 = new Date(2013,1,1); 3 date1 == date2; //执行结果为false 4 date1 === date2; //执行结果为false 5 6 var num1 = new Number(10); 7 var num2 = new Number(10); 8 num1 == num2; //执行结果为false 9 num1 === num2; //执行结果为false10 num1 == 10; //执行结果为true11 10 == num2;... 阅读全文

posted @ 2013-04-23 07:30 幸福框架 阅读(885) 评论(0) 推荐(0) 编辑

2013年4月22日

Javascript:必须知道的Javascript知识点之“作用域链”

摘要: 代码示例 1 var xxxVar1 = 1; 2 var outer = function(){ 3 var xxxVar2 = 2; 4 5 var results = []; 6 7 for(var i = 0; i< 3; i++) 8 { 9 var inner = function(){10 var xxxVar3 = 3;11 return xxxVar3 + xxxVar2 +xxxVar1 + i;12 }13 results .push(inner);14 }1... 阅读全文

posted @ 2013-04-22 06:33 幸福框架 阅读(1964) 评论(13) 推荐(5) 编辑

2013年4月21日

Javascript:必须知道的Javascript知识点之“原型链”

摘要: 代码示例1 var CustomClass = function() { };2 var CustomObject = new CustomClass();发生了什么事情原型链规则规则1每个对象都有一个“__proto__”属性,这个属性对外不可见,只有javascript解释器知道,在google浏览器中可以看到这个属性。规则2“取值操作”CustomObject.XXXProperty的规则是,先查找CustomObject对象本身有没有XXXProperty,没有的话就去CustomObject.__proto__中找,还没找到就去CustomObject.__proto__.__pro 阅读全文

posted @ 2013-04-21 11:37 幸福框架 阅读(1835) 评论(18) 推荐(4) 编辑

2013年4月20日

技术交流:2013-04-13线下交流总结,不再做苦逼的程序员

摘要: 当天交流内容lomox平台介绍,官方网站:http://www.lomox.org/Web/default.aspx。胖子哥闲聊程序人生。DDD&CQRS拥抱幸福之道。收获技术上的收获倒是其次,最大的收获就是认识了Lomox的核心团队成员,2个C++和1个UI。简单介绍一下他们给我的感觉:蛋总:喜欢吃鸡蛋,因此号称蛋总。87年出生,典型的Geek,善言谈。东子:87年出生,七分侠气。UI:估计是87年出生,不好言语,据说做前端工资拿到了将近2W。交流结束后专门请蛋总游了下珠江、吃了个便饭和洗了个脚。中间谈到为什么程序员会苦逼以及如何不苦逼,这也是今天想跟大家分享的东西。为何会苦逼(以我 阅读全文

posted @ 2013-04-20 11:31 幸福框架 阅读(681) 评论(1) 推荐(0) 编辑

2013年4月19日

DDD:DDD+CQRS+高伸缩性的分布式架构

摘要: 物理架构物理架构优势WEB服务器可以单独做负载平衡(独立伸缩)。应用服务可以单击做负载平衡(独立伸缩)。容易引入“后台任务服务器”(正在做这方面的支持)。支持混合部署(一部分业务逻辑运行在WEB服务器,一部分业务逻辑运行在应用服务器),部署方式对开发人员几乎透明。如何选择部署模型当用户数少(自己测试)的时候可以不用应用服务器,只做WEB负责平衡。当用户数多(自己测试)的时候,将频繁执行的业务逻辑分离部署到应用服务器上。对于那些长时间(自己测试)执行的任务,将它们部署到后台任务服务器上。示例代码项目结构WEB服务器代码 1 using System; 2 using System.Collect 阅读全文

posted @ 2013-04-19 14:26 幸福框架 阅读(6141) 评论(14) 推荐(3) 编辑

2013年4月18日

DDD:管理“工作单元实例”的两种模式

摘要: 概念介绍类图如下:在常见的用例场景下,类图的对象图如下:问题在一个用例执行过程中,如何保证同一个界限上下文内的所有仓储实例可以共享同一个工作单元实例?解决方案1仓储采用依赖注入模式 + 使用IOC管理工作单元的生命周期(PerRequest或其它)。代码示例 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 using Autofac; 8 9 namespace AutoFacSt.. 阅读全文

posted @ 2013-04-18 07:41 幸福框架 阅读(4379) 评论(11) 推荐(3) 编辑

2013年4月17日

.NET:处理数据库事务中的并发

摘要: 概述几乎所有的企业应用程序都有多个用户和后台线程,它们可以同时更新数据库。两个数据库处理事务同时访问同一份数据的情形很常见,但是这样很可能导致数据库的不一致,或者引起应用程序行为异常。大部分应用程序必须处理多个事务并发访问同一份数据的情况,而这会影响业务层和表示层的设计。悲观锁你可以利用事务的隔离级别实现悲观锁,一般用“可重复读”和“串行化”就可以满足悲观锁的要求。从表面上看,这种方法看似非常简单,但是这类事务也存在问题,由于隔离事务如何实现完全由平台或数据库提供,因此有时他们会导致性能降低,令人无法接受 。鉴于此,许多应用程序都避免使用这类事务,转而采用乐观锁。乐观锁处理并发更新的另一种方式 阅读全文

posted @ 2013-04-17 06:47 幸福框架 阅读(5872) 评论(0) 推荐(2) 编辑

2013年4月16日

.NET:在线悲观锁、在线乐观锁、离线悲观锁、离线乐观锁代码示例

摘要: 名称解释悲观锁定义:我修改数据的时候,不允许别人修改数据。意图:并发很容易发生(悲观者经常认为某件坏事会发生在自己身上)。场景:绩效评分的过程,因为每个评估人评分后都要修改评估结果表的同一行记录,而且经常是在同一个时间段进行的评分,评分的过程就适合用悲观锁。乐观锁定义:谁都可以修改数据,提交的时候和数据库做比较,如果数据在这期间发生了变化,有两种处理思路:1、失败;2、合并后提交。意图:并发不容易发生(乐观者经常认为某件坏事不会发生在自己身上)。场景:多个人事管理员都可以修改劳动合同,因为这种并发场景很少发生,因此此处采用乐观锁会好很多。离线定义:也叫长事务;一次业务过程需要多次的和服务器通信 阅读全文

posted @ 2013-04-16 08:24 幸福框架 阅读(6070) 评论(4) 推荐(6) 编辑

2013年4月15日

.NET:脏读、不可重复读和幻读代码示例

摘要: 并发可能产生的三种问题(测试代码)脏读定义:A事务执行过程中B事务读取了A事务的修改,但是A事务并没有结束(提交),A事务后来可能成功也可能失败。比喻:A修改了源代码并且并没有提交到源代码系统,A直接通过QQ将代码发给了B,A后来取消了修改。代码示例 1 [TestMethod] 2 public void 脏读_测试() 3 { 4 //前置条件 5 using (var context = new TestEntities()) 6 { 7 ... 阅读全文

posted @ 2013-04-15 12:59 幸福框架 阅读(3670) 评论(13) 推荐(1) 编辑

2013年4月14日

设计原则:我是如何使用“依赖注入”的

摘要: 依赖注入的定义控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。 控制反转还有一个名字叫做依赖注入(Dependency Injection)。简称DI。构造方法注入代码示例1 public class Service2 {3 private readonly IDependService _dependService;4 5 public Service(IDependService dependService)6 {7 _dependService = dependServ... 阅读全文

posted @ 2013-04-14 09:20 幸福框架 阅读(2747) 评论(10) 推荐(2) 编辑

2013年4月13日

DDD:拥抱幸福之道(DDD&CQRS)

摘要: 感谢软件架构群(109404699)今天有机会参加这个群的一个线下的交流活动,本着“积极分享"和"不怕被批”的原则,我主动要求分享一下我对DDD和CQRS的一点认识。准备这次主题演讲的过程让我对DDD和CQRS有了更深刻的认识,这个过程迫使我主动的思考了很多内容。我在此想呼吁的是:技术人员要试着走出去,多积极的参与线上交流和线下交流。关于这次交流的收获,下周一我会好好总结一下。推荐的两个领域驱动群(32066589、14138539)我演讲的PPT(下载地址) 阅读全文

posted @ 2013-04-13 23:34 幸福框架 阅读(2020) 评论(1) 推荐(1) 编辑

2013年4月12日

设计原则:重复的方式以及如何消除重复

摘要: 有意识重复(懒惰的重复)问题:A处的代码和B处的代码很相似,但是又不完全相同。原因:开发人员的懒惰或技能不足,进行的是拷贝式的开发。方案:引入模板方法模式或回调机制(函数指针、委托和接口)。模板方法模式 1 public abstract class TemplateClass 2 { 3 public void Do() 4 { 5 DoCommonStep1(); 6 DoCustomStep2(); 7 DoCommonStep3(); 8 } 9 10 private void DoCommonStep1(... 阅读全文

posted @ 2013-04-12 17:20 幸福框架 阅读(1444) 评论(3) 推荐(0) 编辑

导航

我要啦免费统计