Web项目DDD战略设计:跨多Bounded Context的前端代码归属问题
DDD落地中跨BC前端聚合逻辑的放置方案
首先明确:你提出的单独创建「Web」Bounded Context(以下简称BC)的思路不可行,核心矛盾你自己已经判断对了:BC的核心判定标准是绑定专属的统一语言(Ubiquitous Language,以下简称UL),没有独立业务语义、只是复用其他BC概念的模块,从定义上就不属于领域层的BC范畴。
Web端的页面渲染、跨BC数据聚合逻辑,本质属于用户界面层/应用层的职责,本来就不应该放在任何业务BC内部,也不需要硬套BC的划分规则,常见落地方案有两种,按项目体量选即可:
- 中大型项目、页面聚合逻辑复杂:单独抽离BFF(Backend For Frontend)层作为前端专属的适配层
注意这个模块是分层架构里的应用层/UI层组件,不是BC。它的职责非常单一:- 接收前端发起的页面请求
- 按页面数据需求,调用对应业务BC暴露的公开应用服务接口
- 把不同BC返回的领域对象做DTO转换、字段裁剪、结构拼装,最终输出前端直接可用的视图模型
它不需要承载任何核心业务逻辑,所有业务规则校验、状态流转操作全部下沉到对应BC的领域层实现,本身没有独立的业务UL,完全不存在你担心的概念复用冲突问题。
举个电商场景的例子:商品详情页需要展示商品基础信息(来自Catalog BC)、当前用户购物车中该商品的加购状态(来自Shopping Cart BC)、该商品的用户评价摘要(来自Comment BC),BFF层只需要依次调用三个BC的查询接口拿到结果,拼成详情页需要的结构返回即可,不需要自己实现任何商品、购物车、评价相关的业务规则。
- 小型项目、页面逻辑简单:不需要额外抽离聚合层
直接让各业务BC按需暴露面向前端的轻量查询接口,前端根据页面需要并行调用多个接口,在前端代码层完成视图数据拼装即可。这种模式下没有额外的后端聚合代码,各BC的边界更清晰,维护成本更低。
最后提一个常见的划分误区:
不要把DDD的BC概念套用到所有代码模块上。BC是领域层的划分单位,锚定的是核心业务语义和UL,跨业务的通用支撑模块(比如权限、日志、网关、UI适配层)都不属于BC,直接按照分层架构的职责边界放置即可,不需要强行给它们安上BC的身份。
内容的提问来源于stack exchange,提问作者Jose Luis
相关产品推荐
相关产品推荐

