领域层之聚合

聚合的概念其实不复杂,只不过很多地方把它写复杂了。

譬如我们有一个路由 GET /user/123,代表是访问用户ID=123的用户信息,输出

{

"userid":101,

"username":"lisi"

}

假设这个业务也就这么简单,那么就直接实体+DTO(后面再讲)就完事了。

如果稍微复杂点,这个路由有两个业务

1、取出用户信息

2、记录用户访问日志

那么此时,就涉及到用户实体和用户日志实体的操作。如果分开来写代码,时间长了就会很难维护。2个实体还好,如果有10个实体联合操作呢?

所以聚合的概念就来了

你可以粗暴的理解为: 用户实体和用户日志实体聚合成一个新对象叫做member

具体到代码就是:

type Member struct {
   User *models.UserModel // 聚合根
   UserLog *models.UserLogModel

}

再粗暴点,你可以理解为把需要"一起操作“的实体 放到一起,就这。。。

只不过,这些“需要一起操作的实体们”,有个领头羊,就是聚合根。一切要围绕这个根开展工作。

试想一下,如果用户都没找到,其他如日志什么的还开展个啥?

最后更新于