应用分层

分层与依赖方向

业务服务可以采用经典三层作为基础组织方式:Controller → Service → Mapper → 数据库。Macula 不强制所有业务采用同一种架构;需要领域建模时,可在 Service 内进一步划分应用服务与领域能力,并保持接口和持久化边界清晰。

分层架构图

经典三层架构

工程目录

应用工程目录

各层职责

层次负责什么约束
ControllerHTTP 适配、输入校验、调用 Service不直接访问 Mapper,不放复杂业务规则
Service / impl业务规则、操作编排、事务需要原子性时在公开方法声明事务,明确回滚条件
Mapper数据访问与查询条件使用参数绑定,限定分页、租户与数据范围
Converter各层模型转换沿用 MapStruct,减少手工字段复制

Controller 返回业务对象,由 Web Starter 统一封装 Result;不要重复包装或吞掉应交给统一异常处理的异常。查询与写操作分别验证权限,不能依靠前端隐藏按钮控制访问。

模型对象约定

各层模型的传递关系如下:

各层模型对象传递关系

模型用途边界
Query查询条件、分页与排序可传递至 Service、Mapper;限制任意排序与无限结果集
Form新增、更新等写入请求接入 Bean Validation,不直接作为数据库实体
DTO跨层或跨服务传输只暴露调用方需要的字段
VO面向调用方的展示结果避免泄漏数据库字段与内部实现
BO组合查询或业务处理对象用于业务层与组合查询,不默认成为公共接口
Entity数据库表映射留在持久化边界内,不作为新增 REST / Feign 公共契约

不要直接将客户端提供的租户、角色或身份字段当作可信上下文。身份来自已验证的认证信息,数据范围在服务端查询中落实。

跨服务边界

模型约定同样适用于平台内部微服务调用和跨平台 OpenAPI 交互:

微服务与 OpenAPI 的模型传递

  • *-api 模块保存稳定的 Feign 接口、必要请求 / 返回模型与回退抽象,不反向依赖业务实现。
  • BFF 组织面向页面的聚合与响应,业务服务实现核心规则和持久化。
  • 跨服务通过 API / Feign 调用,不直接引用另一个服务的 Mapper、Entity、Service 实现或资源文件。
  • OpenAPI 负责外部 API 聚合;Thirdparty 隔离第三方协议与内部业务模型。
  • 公共框架能力由 Macula Boot 提供;登录、菜单及平台权限由 Macula Cloud 提供,业务应用按契约接入。

相关指引

业务开发流程见开发业务服务,模块职责见模块说明,环境字段见配置规范,细粒度授权见 Security。