欢迎光临汤雪华的博客

一个人一辈子能坚持做好一件事情就够了!坚持是一种刻意的练习,不断寻找缺点突破缺点的过程,而不是重复做某件事情。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2012年9月8日

摘要: DDD的核心是聚合。这没有问题,大家都认同。但关于DDD中的聚合方式,其实我还是有些担心,下面说说我的想法,希望大家参与讨论。其实当初第一次看到DDD中关于聚合根部分论述的时候,就感觉有些僵化。DDD中的聚合根的分析设计思路大致是这样:1、业务本质逻辑分析;2、确认聚合对象间的组成关系;3、所有的读... 阅读全文

posted @ 2012-09-08 20:50 netfocus 阅读(8873) 评论(14) 推荐(3) 编辑

2012年9月6日

摘要: 基于DDD+Event Sourcing设计的模型如何处理模型重构? 问题背景:ddd的核心是聚合,一个聚合内包含一些实体,其中一个是根实体,这个大家都有共识;另外,如果将DDD与Event Sourcing结合,那就是一个聚合根会产生一些event;那么这里的问题是:如果一个领域对象,一开始是en... 阅读全文

posted @ 2012-09-06 12:22 netfocus 阅读(4958) 评论(3) 推荐(3) 编辑

摘要: 大家看看能否看得懂哦,呵呵!最早的想法是产生于对OO方法的不满,主要的想法是将对象拆开为方法和属性以实现更加灵活的组合,在此之上构想了很多特性,但是过于零散,没有统一的理论,还肯定存在严重的特性冲突问题。将计算机代码看做一个由逻辑实现的符号运算展开的结果,类似于元编程,自称为“逻辑宏”,用逻辑宏实现... 阅读全文

posted @ 2012-09-06 00:31 netfocus 阅读(2343) 评论(2) 推荐(0) 编辑

摘要: 本人在翻看帖子的时候,发现很多网友不太喜欢哲学部分。认为那是漫无边际、浪费时间。但是多了解一些还是有帮助的。以下是我自己在编程时的一些感受。有点杂乱,将就着看看吧。一、对象和事物好像听过这么一句话:人类永远无法认识完整的事物。因为我们认识到的总是事物的某一方面。我们所说的对象实际上是客观事物在人头脑... 阅读全文

posted @ 2012-09-06 00:12 netfocus 阅读(1958) 评论(1) 推荐(1) 编辑

2012年2月12日

摘要: 1. 聚合根、实体、值对象的区别?从标识的角度:聚合根具有全局的唯一标识,而实体只有在聚合内部有唯一的本地标识,值对象没有唯一标识,不存在这个值对象或那个值对象的说法;从是否只读的角度:聚合根除了唯一标识外,其他所有状态信息都理论上可变;实体是可变的;值对象是只读的;从生命周期的角度:聚合根有独立的生命周期,实体的生命周期从属于其所属的聚合,实体完全由其所属的聚合根负责管理维护;值对象无生命周期可言,因为只是一个值;2. 聚合根、实体、值对象对象之间如何建立关联?聚合根到聚合根:通过ID关联;聚合根到其内部的实体,直接对象引用;聚合根到值对象,直接对象引用;实体对其他对象的引用规则:1)能引用 阅读全文

posted @ 2012-02-12 14:22 netfocus 阅读(36434) 评论(40) 推荐(22) 编辑

摘要: 阅读全文

posted @ 2012-02-12 14:08 netfocus 阅读(1571) 评论(2) 推荐(3) 编辑

摘要: 阅读全文

posted @ 2012-02-12 14:06 netfocus 阅读(710) 评论(0) 推荐(0) 编辑

摘要: Reference URL:http://martinfowler.com/articles/lmax.html该架构主要基于:Disruptor + In Memory DDD + Event Sourcing通过高并发框架(Disruptor)实现用户事件的输入和Domain Event的输出;一个常驻内存的Business Logic Processor(DDD领域模型),它负责在纯内存中处理业务逻辑;关键点:首先确保用户输入事件被持久化到数据库,并定时创建快照,然后在内存中响应事件更改业务对象的状态;因为一切都是在内存中处理,所以没有IO,也不需要数据库事务,非常快;机器down了怎么 阅读全文

posted @ 2012-02-12 14:04 netfocus 阅读(9311) 评论(3) 推荐(2) 编辑

摘要: 一个对象从创建开始到消亡会经历很多事件,以前我们是在每次对象参与完一个业务动作后把对象的最新状态持久化保存到数据库中,也就是说我们的数据库中的数据是反映了对象的当前最新的状态。而事件溯源则相反,不是保存对象的最新状态,而是保存这个对象所经历的每个事件,所有的由对象产生的事件会按照时间先后顺序有序的存... 阅读全文

posted @ 2012-02-12 13:51 netfocus 阅读(23425) 评论(17) 推荐(6) 编辑

摘要: CQRS on itself is a very simple pattern. It only describes that the component of an application that processes commands should be separated from the c... 阅读全文

posted @ 2012-02-12 13:49 netfocus 阅读(6615) 评论(6) 推荐(5) 编辑

摘要: 数据有两个重要属性:首先数据是基于时间的,数据是表达一段时间内一个逻辑为真的事实。另外一个属性是数据本质上是不可变的,因为和时间有关,我们是不能回到过去改变数据的真实性。这两个属性就意味着:对数据你其实只有两个主要的操作:读取现有数据,并(随着时间)添加更多新的数据,CRUD(增删改查)称为CR(增读)。这样,CRUD其实没有U修改,因为修改对不可变数据是不其作用的(非常类似DDD中值对象不可变,不能修改,只能更换)。CRUD中也没有删除Delete,其实大部分删除其实是一种创建新数据,如果Bob停止跟随Mary,但是他们不能改变他曾经跟随过他的事实,删除那个他不跟随她的数据,你会增加一个数据 阅读全文

posted @ 2012-02-12 13:43 netfocus 阅读(3226) 评论(3) 推荐(2) 编辑

摘要: 人类社会的一切事物都是来源于对造物主智慧的学习,人类本身是不会创造任何东西的。外国新技术并不能作为软件架构的终极准则,因为老外也是人。我认为客观世界的架构应该是软件架构的唯一准则,换而言之,上帝也是一个架构师,而这个客观世界就是他的作品。有这么完美的学习对象,为什么要舍本逐末呢?就拿领域对象的设计来说,在客观世界中,人如果要做某件事情,比如扫地这个动作,扫地难道是人自己完成的吗?其实扫地是人借助扫帚这个工具完成的。换而言之,领域对象的一些动作,也根本不属于他自己,如果你把这些动作硬要强加在领域对象身上,就肯定会出现类似领域对象中调用技术层这种别扭的问题。比如,经常有什么贫血对象,和充血对象之类 阅读全文

posted @ 2012-02-12 13:43 netfocus 阅读(3716) 评论(3) 推荐(1) 编辑

摘要: 经典的DDD的告诉我们如果一个领域概念是一个跨多个聚合的动作,比如转帐,那么就应该用领域服务来实现这样的业务概念。领域服务的输入和输出参数都是聚合根,领域服务内部按照业务逻辑规定的执行顺序,按照面向过程的方式,逐个调用相关聚合根的相关方法完成整个业务操作。这种方式的优点是:1)清晰的表达和封装了业务... 阅读全文

posted @ 2012-02-12 13:42 netfocus 阅读(6151) 评论(4) 推荐(2) 编辑

摘要: Business value of the events, the value of having a log, the fact that the Event Store is additive only.The biggest advantage of this architecture is ... 阅读全文

posted @ 2012-02-12 13:40 netfocus 阅读(3085) 评论(0) 推荐(0) 编辑

摘要: If you are wondering “What comes after agile?,” you should look towards continuous delivery. While your development processes may be fully optimized, ... 阅读全文

posted @ 2012-02-12 13:38 netfocus 阅读(826) 评论(0) 推荐(0) 编辑

2012年1月31日

摘要: CQRS is just a concept that we can seperate the application to two parts: the write part and the read part, that's all;Command: A command represents w... 阅读全文

posted @ 2012-01-31 00:06 netfocus 阅读(3498) 评论(3) 推荐(1) 编辑

2011年12月3日

摘要: 1. 书是学习知识最快的最系统的方法;2. 看名人Blog是学习正统知识第二个非常有效的方法;3. 我热衷于微软.NET平台下的web应用开发,对软件设计,软件工程也有一定兴趣;4. 近一年来以及将来重点关注DDD的理论研究和逐步实践;5. 知识就是金钱;6. 学习知识是一个循序渐进的过程,看的书也是有层次的;7. 只有有恒心和毅力,坚定的意志才能深入了解某门技术或设计或架构,才又机会知道某个领域中哪些问题值得去研究;8. 当你研究到一定程度,会发现国内与国外的差别,你才会感叹学好英语非常重要;9. 不要以为工作多年,写过很多软件,就是水平高,就具有设计能力;提高设计能力我觉得首先看你学习的方 阅读全文

posted @ 2011-12-03 20:44 netfocus 阅读(2673) 评论(10) 推荐(2) 编辑

摘要: A cluster of associated objects that are treated as a unit for the purpose of data changes. External references are restricted to one member of the Ag... 阅读全文

posted @ 2011-12-03 14:21 netfocus 阅读(3356) 评论(2) 推荐(0) 编辑

2011年11月13日

摘要: 创建领域对象采用构造函数或者工厂,如果用工厂时需要依赖于领域服务或仓储,则通过构造函数注入到工厂;一个聚合是由一些列相联的Entity和Value Object组成,一个聚合有一个聚合根,聚合根是Entity,整个聚合被看成是一个数据修改的单元,也就是说整个聚合内的所有对象要么同时被保存,要么都不能... 阅读全文

posted @ 2011-11-13 18:52 netfocus 阅读(9251) 评论(16) 推荐(11) 编辑

2011年11月2日

摘要: 阅读本文需要有DDD,DCI的知识背景。 首先,我觉得软件是用来被用户使用的,也就是说软件是用来帮用户完成一些事情的。从下面的用例图可以很好的理解用户与软件的关系: 上图是超市里的一个营业员处理一笔销售的一个用例。从这个用例我们可以清楚的看到营业员和系统之间的一个交互。从中我们可以清晰的得出系统该做... 阅读全文

posted @ 2011-11-02 23:14 netfocus 阅读(4329) 评论(11) 推荐(4) 编辑