java - Java中按功能模块化进行封装

标签 java module architecture domain-driven-design

我有一个用 Spring 编写的逐层布局的应用程序,并公开 REST API,因此我有称为 Controller 、服务、模型、dao 等的包。

我想重构它,所以它将按功能进行打包,其中每个顶级包都将是带有外观类(将是公共(public)的)和包私有(private) Controller 、服务、存储库类的小模块。只是为了确保一切都小而有条理。

按功能分离它们不是问题,但我应该如何处理实体?

我有这样的模型结构:

model

例如:我有一个功能可以处理 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/

相关文章:

java - 尽管我正在声明布局管理器,但为什么没有调用 paintComponent(Graphics)

java - SQL Server 2008 上的分页

javascript - 自定义元素类型在脚本类型=模块中加载时报告 HTMLElement?

css - 表达式引擎模块中的自定义 CSS

c# - 依赖注入(inject)和开发生产力

architecture - 如何将我的推荐系统集成到我的网站中?

java - 组合后端调用与单独后端调用

java - 向 RatingBar 添加边距/填充

java - 如何使用 Java Pattern 和 Matcher 在字符串中查找 2 次字符串?

iOS : Could not build module <framework-name>