1.ddd与spring data
ddd: domain-driven design(领域驱动设计)是复杂需求下软件开发的实现方式。有时间我将专门来讲解一下ddd。
spring data在很多地方都是按照ddd原则进行的设计(如repository), 这里spring data主要是实现了ddd的aggregate和domain event:
下面我们演示一个当person这个aggregate root 保存成功后,通过person的gender属性对统计实体genderstat更新男女性别的统计数量。
2.演示
2.1 person aggregate root
person作为aggregate root具备发布domain event的能力,在spring data 下可以有两种实现方式:
如:
@entity @data @allargsconstructor @noargsconstructor @tostring(exclude = "domainevents") public class person { @id @generatedvalue private long id; private string name; private integer gender;//1:male;2:female @domainevents collection<object> domainevents() { list<object> events= new arraylist<object>(); events.add(new personsavedevent(this.id,this.gender)); return events; } @afterdomaineventpublication void callbackmethod() { // } }
或
@entity @data @allargsconstructor @noargsconstructor @tostring(exclude = "domainevents") public class person extends abstractaggregateroot{ @id @generatedvalue private long id; private string name; private integer gender;//1:male;2:female public person afterpersonsavedcompleted(){ registerevent(new personsavedevent(this.id,this.gender)); return this; } }
2.2 监听事件处理
@component public class genderstatprocessor { @autowired genderrepository genderrepository; @async @transactionaleventlistener public void handleafterpersonsavedcomplete(personsavedevent event){ genderstat genderstat = genderrepository.findone(1l); if(event.getgender()==1){ genderstat.setmalecount(genderstat.getmalecount()+1); }else { genderstat.setfemalecount(genderstat.getfemalecount()+1); } genderrepository.save(genderstat); } }
3 源码地址:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问, 点击进行留言回复!!
[杭电多校2020]第一场 1004 Distinct Sub-palindromes
Swift -- 将本地生成的UIImage进行持久化保存(存到文件中fileManager.createFile)
网友评论