| 题源类型 | 押题 |
| 年份/批次 | |
| 适用项目 | 某互联网公司线上商品交易与运营平台 |
| 主题概念 | 领域驱动设计强调围绕业务领域建立模型,使业务术语、业务规则和软件实现保持一致,并通过清晰边界控制系统复杂度 |
| 常见方法 | 通用语言、限界上下文、实体和值对象、聚合、领域服务和仓储等 |
| 已选论文点 | 限界上下文划分 / 领域模型设计 / 分层与仓储机制 |
| 项目位置/技术/需求 | 在业务边界划分方面,我们采用限界上下文来满足复杂业务协同和模型一致性的要求 |
| 解决的问题 | 如果把所有概念放入一个统一大模型中,容易导致模型边界模糊,后续需求变更时也难以判断影响范围 |
| 解决的方法 | 为解决这一问题,我组织产品、开发和测试人员围绕核心业务流程梳理领域词汇,将系统划分为商品活动、交易订单、库存协同、支付结算和运营分析等上下文,并为每个上下文明确主要术语、业务规则和对外接口 |
| 具体的实现 | 具体实现时,各上下文内部保持模型自治,对外通过 Dubbo 接口和 RocketMQ 消息传递必要结果 |
| 例子 | 以用户提交订单为例,交易订单上下文负责订单生命周期和状态流转,库存协同上下文只提供库存占用和释放结果,支付结算上下文负责接收支付渠道回传并反馈支付状态 |
| 效果 | 通过限界上下文划分,各团队能够围绕清晰业务边界开展设计和开发,减少了概念混用和跨模块修改带来的风险 |
| 项目位置/技术/需求 | 在核心业务规则表达方面,我们采用领域模型设计来解决规则分散和状态控制不清的问题 |
| 解决的问题 | 原有系统中,活动价格校验、订单状态判断和库存处理逻辑分散在页面接口、服务方法和数据库脚本中,业务规则一旦变化,开发人员需要在多个位置查找和修改,容易出现遗漏 |
| 解决的方法 | 为解决这一问题,我组织项目组以交易订单为核心建立领域模型,将订单设计为具有生命周期的实体,将价格快照、收货信息、支付方式等设计为值对象,并以订单聚合封装订单创建、支付确认、超时关闭和售后申请等关键行为 |
| 具体的实现 | 具体实现时,领域模型使用 Java 对象表达业务状态和行为,持久化数据保存到 MySQL,热点状态通过 Redis 辅助支撑 |
| 例子 | 以活动下单为例,系统在创建订单时由订单聚合校验商品状态、价格快照和库存占用结果,订单状态只能通过领域行为发生变化,不能由外部模块随意修改 |
| 效果 | 通过这种模型设计,核心业务规则集中在领域对象内部,代码结构更接近业务语言,测试人员也能够围绕订单生命周期设计用例,减少了状态流转错误 |
| 项目位置/技术/需求 | 在系统分层实现方面,我们采用分层与仓储机制来隔离领域逻辑和技术细节 |
| 解决的问题 | 在线交易平台需要同时访问数据库、缓存、消息队列和外部支付渠道,如果领域对象直接依赖这些基础设施,业务模型就会被技术实现牵制,后续替换缓存策略或调整消息机制时容易影响核心业务逻辑 |
| 解决的方法 | 为解决这一问题,我们将系统划分为接口层、应用层、领域层和基础设施层 |
| 具体的实现 | 接口层负责接收请求和参数校验,应用层负责编排业务流程,领域层承载订单、库存、支付等核心规则,基础设施层负责 MySQL、Redis、RocketMQ 等技术访问 仓储接口定义在领域侧,具体数据访问由基础设施层实现 |
| 例子 | 以支付结果回传为例,应用层接收回传结果后,通过仓储加载订单聚合,调用领域行为完成支付确认,再由仓储保存状态,并通过消息机制通知库存和运营分析等模块 |
| 效果 | 通过这种分层与仓储设计,领域规则不再散落在技术代码中,业务逻辑、流程编排和数据访问边界更加清晰,系统后续维护和单元测试也更加方便 |