Tango Blog

Happy Hacking

DDD 实践手册(番外篇: 事件风暴-实践)

::上一篇:: 文章中介绍了什么是事件风暴,以及相关的概念。那么这次会通过一个实际的例子带领大家经历一次完整的事件风暴,并且分享自己在使用事件风暴中所遇到的问题。那么就让我们开始吧。 背景 在正式开始事件风暴之前,先来介绍一下业务分析的场景。我从之前参与保险核心业务系统中选择了一个业务场景,用来展现如何使用事件风暴发现领域中的聚合与其他相关领域对象。 这里选择的业务场景是保险事故的理赔...

DDD 实践手册(番外篇: 事件风暴-概念)

DDD 实践手册(番外篇: 事件风暴-概念) 在我过往的项目经历中,DDD 落地遇到最大的问题会有两个,其一是如何发现系统中的 Aggregate(聚合),其二是如何划分 Bounded Context(限界上下文)。这两个元素可谓是 DDD 的核心概念,分别对应了单个业务功能模块内核心的领域对象,以及如何划分业务功能的边界。 这两项工作的共同点,或者说是困难之处都来源于不是一项单纯的技术...

设计模式(22)–享元模式

1.模式适用性 2.模式结构 3.实现 4.总结 享元模式是一个结构性设计模式,可以通过共享相近的状态来减少系统的存储开销。当一个系统需要创建很多对象,并且这些对象共享一些状态时我们可以考虑使用享元模式。 运用共享技术有效地支持大量细粒度的对象。 1.模式适用性 一个系统使用了大量的对象 由于使用大量对象,造成很大的存储开销 对象的大多数...

设计模式(21)-中介者模式

1.模式适用性 2.模式结构 3.实现 4.总结 中介者模式用于解决多个对象相互通讯的问题,当多个对象需要相互通讯时需要了解彼此的接口,使得对象之间成为紧耦合的关系,使用中介者模式将对象间通讯分离开来,通讯将通过中介者,起到通讯对象的解偶作用。 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间...

设计模式(20)-职责链模式

1.模式适用性 2.模式结构 3.实现 4.总结 职责链模式将请求响应者串成一条链,一般的请求响应者保存一个下家响应者,当无法处理请求的时候将此请求交给下家响应者,直到请求得以被处理。 职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 1.模式适用性 ...

设计模式(19)-命令模式

在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”,但在某些实际应用场景下我们需要对请求进行记录、撤销等操作,这是这种紧耦合的结构不能满足需求的变化,此时我们可以使用命令(Command)模式来应用在这种场景。 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。 1.模式适用性 系统需要将请求调...

设计模式(18)-桥接模式

1.模式适用性 2.模式结构与多维问题 3.实现 4.总结 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,多维度的变化使得继承关系无法很好的处理系统扩展的问题,这一回说道的桥接模式可以使用在多维度的系统上。 将抽象部分与实现部分分离,使它们都可以独立的变化。 1.模式适用性 不希望在抽象和它的实现部分之间有一个固定的绑定关系。...

设计模式(17)–迭代器模式

1.模式适用性 2.模式结构 3.实现 4.总结 迭代器模式是一个非常常用的设计模式,STL模板中就使用了迭代器设计模式,各种容器的“iterator”就是使用了迭代器模式。我们看一下《设计模式》如何描述这个这个设计模式: 提供一种方法顺序访问一个聚合对象中各个元素 , 而又不需暴露该对象的内部表示。 1.模式适用性 访问一个聚合对象的内容而无需...

设计模式(16)-组合模式

1.模式适用性 2.模式结构 3.实现 4.总结 组合模式是结构型模式中的一种,其组织类似与“树”。使用组合模式可以将整体与部分一视同仁的对待,这样忽略了组合对象与单个对象之间的不同。在处理整体与部分间的层次结构的时候也应该考虑使用组合模式的使用。 组合模式(Composite),将对象组合成树型结构以表示’部分-整体’的层次结构。组合模式使得用户对单个对象和组...

设计模式(15)-备忘录模式

1.模式适用性 2.模式结构 3.实现 4.总结 备忘录模式顾名思义就是用于保存一个类的状态的设计模式。这个 模式可用于类似“撤销”等功能的实现。设计模式中如此描述备忘录模式(Memento): 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 1.模式适用性 必须保存一个对象在某...