
public abstract class Event { private final UUID id; private final DateTime createdTime; public Event() { this.id = UUID.randomUUID(); this.createdTime = new DateTime(); }}
可以看到,范畴事宜还包含了ID,然则该ID并不是实体(Entity)层面的ID概念,而是重要用于事宜追溯和日记。别的,因为范畴事宜描述的是页堪产生的工作,我们应当将范畴事宜建模成弗成变的(Immutable)。大年夜DDD概念上讲,范畴事宜更像一种特别的值对象(Value Object)。对于上文中提到的咖啡厅例子,创建“客户已达到”事宜如下: 
public final class CustomerArrivedEvent extends Event { private final int customerNumber; public CustomerArrivedEvent(int customerNumber) { super(); this.customerNumber = customerNumber; }}
在这个CustomerArrivedEvent事伊闼楝除了持续自Event的属性外,还自定义了一个与该事宜密切接洽关系的营业属性——客户人数(customerNumber)——如许后续操作便可预留响应数量标座位了。别的,我们将所有属性以及CustomerArrivedEvent本身都声明成了final,并且不向外裸露任何可能修改┞封些属性的办法,如许便包管了事宜的不变性。宣布范畴事宜 在应用范畴事宜时,我们平日采取“宣布-订阅”的方法来集成不合的模块或体系。在单个微办事内部,我们可以应用范畴事沂攀来集成不合的功能组件,比如在上文中提到的“用户注册之后向用户发送迎接邮件”的例子中,注册组件发出一个事宜,邮件发送组件接收到该事宜后向用户发送邮件。 【编辑推荐】
- 微办事时代 怎么看华闻敉件开辟云实现DevOps落地
- 微办事架构:基于微办事和Docker容器技巧的PaaS云平台架构设计(微办事架构实施道理)
- 成功备战微办事的5个预备步调
- 技巧干货|如安在微办事架构下构建高效的运维治理平台?



public class Order { public Order(EventPublisher eventPublisher) { //create order //… eventPublisher.publish(new OrderPlacedEvent()); }}
注:为了把核心集中在事宜宣布上,我们对Order对象做了简化,Order对象本身在实际编码中不具备参考性。 可以看到,为了宣布OrderPlacedEvent事宜,我们须要将Service对象EventPublisher传入,这显然是一种API污染,即Order作为一个范畴对象只须要存眷和营业相干的数据,而不是诸如EventPublisher如许的基本举措措施对象。 另一种办法是由NServiceBus的开创人Udi Dahan提出来的,即在范畴对象中经由过程调用EventPublisher上的静态办法宣布范畴事宜:
public class Order { public Order() { //create order //... EventPublisher.publish(new OrderPlacedEvent()); }}
这种办法固然避免了API污染,然则这里的publish()静态办法将产生副感化,对Order对象的测试带来了难处。此时,我们可以采取“在聚合根中临时保存范畴事宜”的方法予以改进:
推荐阅读
【引自攀岩人生的博客】MMM即Multi-Master Replication Manager for MySQL:mysql多主复制治理器,基于perl实现,关于mysql主主复制设备的监控、故障转移和治理的一套可伸缩的脚本套件(在任>>>详细阅读
本文标题:在微服务中使用领域事件
地址:http://www.17bianji.com/lsqh/36107.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示