我有一个用 Spring 编写的逐层布局的应用程序,并公开 REST API,因此我有称为 Controller 、服务、模型、dao 等的包。
我想重构它,所以它将按功能进行打包,其中每个顶级包都将是带有外观类(将是公共(public)的)和包私有(private) Controller 、服务、存储库类的小模块。只是为了确保一切都小而有条理。
按功能分离它们不是问题,但我应该如何处理实体?
我有这样的模型结构:
例如:我有一个功能可以处理 AuditAssignment 对象的添加、删除等。因此,在新包中,将有剩余 Controller 公开此类 API、服务、存储库(所有包私有(private))和其他模块可以使用的一些公共(public)外观(即获取分配或在需要时添加它们)。我应该如何处理整个模型 - 实体?是否应该将其放置在外部某个地方作为核心?或者也许实体应该在包之间拆分,但应该是公开的(以使关系正常工作)?
最佳答案
您应该通过bounded context打包(BC
) 而不是由 feature
(考虑到 BC
可以具有一个或多个 feature
)。然后您可以使用 integration technics 中的任何一个BC
之间,例如反腐败层
。
What should I do with whole model - entities? Should it be placed somewhere outside as a core? Or maybe entities should be splitted between packages, but public (to get relationships working)?
如果是实体,您可以通过每个BC
中特定的属性来拆分它们,并且它们可以共享相同的ID
,因此您也可以更新共享的属性(因为有在很多情况下,不同BC
中的实体具有一些共同属性;即授权BC
中用户的昵称
和作者姓名
为 Colaboration BC
中的通讯作者)。
附注如果你像这样拆分它们,你就离微服务只有一英寸的距离了
关于java - Java中按功能模块化进行封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44898971/