依赖模块的Golang DDD实现

i.v*_*van 2 architecture domain-driven-design interface go

我正在尝试为我的应用程序模块实现 DDD 架构,但遇到了在它们之间存储类似(依赖)结构的问题。

在第一个包中,我存储与实体People相关的所有内容:服务(存储库)、控制器、模型等...

在第二个包中,我存储与另一个实体公寓相关的所有内容:服务(存储库)、控制器、模型等...

每个Apartment可以包含多个Tenants,它们以与People相同的结构存储在数据库中。

一些公寓包服务应该能够调用诸如 get/update/... Tenants 之类的方法。我很乐意不重新实现这些操作并从PeoplePeopleService 中的实现中使用它们,但该服务返回People实体,而不是Tenant

我是否应该创建People 的附加结构(复制粘贴整个源代码)到Apartment包中,将其称为Tenant并将PeopleService 的返回类型转换为它?

或者有其他方法可以做到吗?

另外,我应该在哪里存储具体实体的服务/存储库(与 CRUD 类方法的接口)的接口?接口PeopleService应该在PeopleApartment包中吗?

谢谢。

Ale*_*nok 6

可能有不同的方法,坦率地说,这个问题可能应该以过于广泛和基于意见的方式结束。

我可能会这样做:

  1. 在一个单独的包中解耦所有链接的模型models

  2. 对 People->Tenants 使用组合,例如 type Person { Name string } type Tenant struct { Person }

  3. 问候人<->公寓 - 创建一个包tenants,该包将使用人员和公寓的模型和服务进行操作。