4.2、商城领域分析
分类: DDD领域驱动设计实战
商城领域分析
商城系统是一个复杂的业务领域,需要识别核心领域和子域。本节将分析商城领域,识别各个业务域。
本节将学习:用户域(User Domain)、商品域(Product Domain)、订单域(Order Domain)、支付域(Payment Domain),以及库存域(Inventory Domain)。
用户域(User Domain)
用户域职责
用户域的核心职责:
- 用户注册:新用户注册
- 用户认证:用户登录验证
- 用户信息管理:用户信息维护
- 权限管理:用户权限控制
用户域实体
// 用户聚合根 public class User { private Long id; private String username; private String email; private String password; private UserProfile profile; // 值对象 } // 用户档案值对象 public class UserProfile { private final String nickname; private final String avatar; private final String phone; }
商品域(Product Domain)
商品域职责
商品域的核心职责:
- 商品管理:商品的增删改查
- 商品分类:商品分类管理
- 商品搜索:商品搜索功能
- 商品展示:商品信息展示
商品域实体
// 商品聚合根 public class Product { private Long id; private String name; private ProductDescription description; // 值对象 private Money price; // 值对象 private Long categoryId; private ProductStatus status; } // 商品描述值对象 public class ProductDescription { private final String description; private final String imageUrl; } // 价格值对象 public class Money { private final BigDecimal amount; private final String currency; }
订单域(Order Domain)
订单域职责
订单域的核心职责:
- 订单创建:创建订单
- 订单管理:订单状态管理
- 订单查询:订单信息查询
- 订单计算:订单金额计算
订单域实体
// 订单聚合根 public class Order { private Long id; private String orderNo; private Long userId; private Money totalAmount; // 值对象 private OrderStatus status; private ShippingAddress address; // 值对象 private List<OrderItem> items; // 实体列表 // 领域方法 public void calculateTotal() { // 计算订单总金额 } public void addItem(OrderItem item) { // 添加订单项 } } // 订单项实体 public class OrderItem { private Long id; private Long productId; private Integer quantity; private Money price; // 值对象 private Money subtotal; // 值对象 } // 配送地址值对象 public class ShippingAddress { private final String province; private final String city; private final String detail; }
支付域(Payment Domain)
支付域职责
支付域的核心职责:
- 支付处理:处理支付请求
- 支付回调:处理支付回调
- 支付状态管理:管理支付状态
- 支付记录:记录支付信息
支付域实体
// 支付聚合根 public class Payment { private Long id; private String paymentNo; private Long orderId; private Money amount; // 值对象 private PaymentMethod method; // 枚举 private PaymentStatus status; // 领域方法 public void process() { // 处理支付 } public void complete() { // 完成支付 } }
库存域(Inventory Domain)
库存域职责
库存域的核心职责:
- 库存管理:库存信息管理
- 库存扣减:扣减库存
- 库存查询:查询库存信息
- 库存预警:库存不足预警
库存域实体
// 库存聚合根 public class Inventory { private Long id; private Long productId; private Integer stock; private Integer reservedStock; // 预留库存 // 领域方法 public void deduct(Integer quantity) { if (stock < quantity) { throw new InsufficientStockException(); } stock -= quantity; } public void reserve(Integer quantity) { if (stock < quantity) { throw new InsufficientStockException(); } stock -= quantity; reservedStock += quantity; } }
领域关系图
官方资源
- DDD 领域建模:https://www.domainlanguage.com/ddd/
本节小结
在本节中,我们分析了:
第一个是用户域。 用户注册、认证、信息管理。
第二个是商品域。 商品管理、分类、搜索。
第三个是订单域。 订单创建、管理、计算。
第四个是支付域。 支付处理、回调、状态管理。
第五个是库存域。 库存管理、扣减、查询。
这就是商城领域分析。识别各个业务域,是进行 DDD 设计的第一步。
在下一节,我们将学习如何划分限界上下文,明确各个上下文的边界。