介绍
本篇文章为大家展示了域事件怎么在春天数据中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强> 1。DDD与弹簧数据强>
DDD:领域驱动设计(领域驱动设计)是复杂需求下软件开发的实现方式。有时间我将专门来讲解一下DDD。
春数据在很多地方都是按照DDD原则进行的设计(如库),这春天里数据主要是实现了DDD的聚合和域事件:
- <李>
总:一系列可以看成单一单元的领域对象的组合。如订单(订单)和购物清单(单项)都是单独的对象,但是将他们当成一个独立的单元(聚合)。每个总都有一个总根,任何和外部交互应该只能通过聚合根,这样聚合根就可以确保聚合的完整性。一个聚合内部具有事务(数据一致性)边界。
李> <李>域事件:聚合之间为了保证数据的一致性,使用事件驱动架构(事件驱动体系结构)来实现数据的最终一致性(最终一致性)。而这些事件是通过聚合根发布的域事件。
李>下面我们演示一个当人这个聚合根保存成功后,通过的人的性别属性对统计实体GenderStat更新男女性别的统计数量。
<强> 2。演示强>
2.1人聚合根
人作为聚合根具备发布领域事件的能力,在春天数据下可以有两种实现方式:
- <李>
——继承AbstractAggregateRoot,并使用其registerEvent()方法注册发布事件
李> <李>——使用@DomainEvents注解方法发布事件
李>如:
@ entity @ data @AllArgsConstructor @NoArgsConstructor @ToString (=exclude “domainEvents") public class  Person { ,@ id ,@GeneratedValue ,private Long id; ,private String 名称; ,private Integer 性别;//1:男性;2:女性 ,@DomainEvents ,Collection
或
@ entity @ data @AllArgsConstructor @NoArgsConstructor @ToString (=exclude “domainEvents") public class  Person extends  AbstractAggregateRoot { ,@ id ,@GeneratedValue ,private Long id; ,private String 名称; ,private Integer 性别;//1:男性;2:女性 ,public Person  afterPersonSavedCompleted () { registerEvent才能(new PersonSavedEvent (this.id this.gender)); return 才能;; ,} }
2.2监听事件处理
@ component public class  GenderStatProcessor { ,@ autowired ,GenderRepository genderRepository; ,@Async ,@TransactionalEventListener ,public void  handleAfterPersonSavedComplete (PersonSavedEvent 事件){ GenderStat 才能;GenderStat =, genderRepository.findOne(1升); 如果才能(event.getGender ()==1) { ,,genderStat.setMaleCount (genderStat.getMaleCount () + 1); }else {才能 ,,genderStat.setFemaleCount (genderStat.getFemaleCount () + 1); ,,} genderRepository.save才能(genderStat); ,} }
上述内容就是域事件怎么在春天数据中使用,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。