2012-02-12 14:22 by netfocus, 816 visits, 网摘, 收藏, 编辑
摘要:1. 聚合根、实体、值对象的区别?从标识的角度:聚合根具有全局的唯一标识,而实体只有在聚合内部有唯一的本地标识,值对象没有唯一标识,不存在这个值对象或那个值对象的说法;从是否只读的角度:聚合根除了唯一标识外,其他所有状态信息都理论上可变;实体是只读的;值对象也是只读的;实体唯一与值对象有区别的地方是实体有一个聚合内唯一的标识,而值对象没有任何唯一标识;从生命周期的角度:聚合根有独立的生命周期,实体的生命周期从属于其所属的聚合,值对象无生命周期可言,因为只是一个值;2. 聚合根、实体、值对象对象之间如何建立关联?聚合根到聚合根:通过ID关联;聚合根到其内部的实体,直接对象引用;聚合根到值对象,直
阅读全文
2012-02-12 14:04 by netfocus, 377 visits, 网摘, 收藏, 编辑
摘要:Reference URL:http://martinfowler.com/articles/lmax.html该架构主要基于:Disruptor + In Memory DDD + Event Sourcing通过高并发框架(Disruptor)实现用户事件的输入和Domain Event的输出;一个常驻内存的Business Logic Processor(DDD领域模型),它负责在纯内存中处理业务逻辑;关键点:首先确保用户输入事件被持久化到数据库,并定时创建快照,然后在内存中响应事件更改业务对象的状态;因为一切都是在内存中处理,所以没有IO,也不需要数据库事务,非常快;机器down了怎么
阅读全文
2012-02-12 13:51 by netfocus, 229 visits, 网摘, 收藏, 编辑
摘要:我认为,我们可以从事实观的角度去理解事件溯源。一个对象从创建开始到消亡会经历很多领域事件,以前我们是在每次对象参与完一个业务动作后把对象的最新状态持久化保存到数据库中,也就是说我们的数据库中的数据是反映了对象的当前最新的状态。而事件溯源则相反,不是保存对象的最新状态,而是保存这个对象所经历的每个事件,所有的由对象产生的事件会按照时间先后顺序有序的存放在数据库中。可以看出,事件溯源的这种做法是更符合事实观的,因为它完整的描述了对象的整个生命周期过程中所经历的所有事件。那么,领域事件到底如何影响一个领域对象的状态的呢?很简单,当我们在触发某个领域对象的某个行为时,该领域对象会先产生一个领域事件,然
阅读全文
2012-02-12 13:49 by netfocus, 151 visits, 网摘, 收藏, 编辑
摘要: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 component that processes queries. Although this separation is very simple on itself, it provides a number of very powerful features when combined with
阅读全文
2012-02-12 13:43 by netfocus, 190 visits, 网摘, 收藏, 编辑
摘要:数据有两个重要属性:首先数据是基于时间的,数据是表达一段时间内一个逻辑为真的事实。另外一个属性是数据本质上是不可变的,因为和时间有关,我们是不能回到过去改变数据的真实性。这两个属性就意味着:对数据你其实只有两个主要的操作:读取现有数据,并(随着时间)添加更多新的数据,CRUD(增删改查)称为CR(增读)。这样,CRUD其实没有U修改,因为修改对不可变数据是不其作用的(非常类似DDD中值对象不可变,不能修改,只能更换)。CRUD中也没有删除Delete,其实大部分删除其实是一种创建新数据,如果Bob停止跟随Mary,但是他们不能改变他曾经跟随过他的事实,删除那个他不跟随她的数据,你会增加一个数据
阅读全文
2012-02-12 13:43 by netfocus, 193 visits, 网摘, 收藏, 编辑
摘要:人类社会的一切事物都是来源于对造物主智慧的学习,人类本身是不会创造任何东西的。外国新技术并不能作为软件架构的终极准则,因为老外也是人。我认为客观世界的架构应该是软件架构的唯一准则,换而言之,上帝也是一个架构师,而这个客观世界就是他的作品。有这么完美的学习对象,为什么要舍本逐末呢?就拿领域对象的设计来说,在客观世界中,人如果要做某件事情,比如扫地这个动作,扫地难道是人自己完成的吗?其实扫地是人借助扫帚这个工具完成的。换而言之,领域对象的一些动作,也根本不属于他自己,如果你把这些动作硬要强加在领域对象身上,就肯定会出现类似领域对象中调用技术层这种别扭的问题。比如,经常有什么贫血对象,和充血对象之类
阅读全文
2012-02-12 13:42 by netfocus, 227 visits, 网摘, 收藏, 编辑
摘要:1. 经典的DDD的告诉我们如果一个领域概念是一个跨多个聚合的动作,比如转帐,那么就应该用领域服务来实现这样的业务概念。领域服务的输入和输出参数都是聚合根,领域服务内部按照业务逻辑规定的执行顺序,按照面向过程的方式,逐个调用相关聚合根的相关方法完成整个业务操作。这种方式的优点是:1)清晰的表达和封装了业务逻辑;2)代码清晰,容易理解,代码可读性强;缺点:1)基本的OO思想告诉我们,对象与对象之间应该是通过发送消息和接收消息的方式来通信的。但是通过前面这种方式,对象之间不再像我们想的那样会通过发送消息和接收消息来相互协作了,而都是被动的被一个第三方协调者服务对象来统一协调,这其实是一种面向过程的
阅读全文
2012-02-12 13:40 by netfocus, 114 visits, 网摘, 收藏, 编辑
摘要: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 that it allows you to design your model to meet specific requirements. Typically, the requirements for changing data are significantly different than
阅读全文
2012-02-12 13:38 by netfocus, 82 visits, 网摘, 收藏, 编辑
摘要:If you are wondering “What comes after agile?,” you should look towards continuous delivery. While your development processes may be fully optimized, it still might take your organization weeks or months to get a single change into production. Continuous delivery focuses on maximizing automation inc
阅读全文
2012-02-12 13:35 by netfocus, 167 visits, 网摘, 收藏, 编辑
摘要:原文地址:http://nathanmarz.com/blog/how-to-beat-the-cap-theorem.htmlCAP定理是数据系统设计的基本理论,目前几乎所有的数据系统的设计都遵循了这个定理。但CAP定理给目前的数据系统带来了许多复杂的、不可控的问题,使得数据系统的设计越来越复杂。Twitter首席工程师、Storm的作者Nathan Marz在本文中通过避开CAP定理带来的诸多复杂问题,展示了一个不同于以往的数据系统设计方案,给我们的数据系统设计带来了全新的思路。CAP定理指出,一个数据库不可能同时满足一致性(Consistency)、可用性(Availability)和分
阅读全文
2012-02-12 13:31 by netfocus, 67 visits, 网摘, 收藏, 编辑
摘要:Learn Unit TestingGet familiar with distributed Version Control Systems: Git or Mercurial.Learn about IoC Containers: Autofac, Windsor Container andStructureMap.Contribute to Open Source Projects of your choice.Learn about Continuous Integration and try setting up TeamCity, Hudsonor CruiseControl.NE
阅读全文