4.2商城领域分析

分类: DDD领域驱动设计实战

商城领域分析

商城系统是一个复杂的业务领域,需要识别核心领域和子域。本节将分析商城领域,识别各个业务域。

本节将学习:用户域(User Domain)、商品域(Product Domain)、订单域(Order Domain)、支付域(Payment Domain),以及库存域(Inventory Domain)。

用户域(User Domain)

用户域职责

用户域的核心职责:

  1. 用户注册:新用户注册
  2. 用户认证:用户登录验证
  3. 用户信息管理:用户信息维护
  4. 权限管理:用户权限控制

用户域实体

// 用户聚合根 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)

商品域职责

商品域的核心职责:

  1. 商品管理:商品的增删改查
  2. 商品分类:商品分类管理
  3. 商品搜索:商品搜索功能
  4. 商品展示:商品信息展示

商品域实体

// 商品聚合根 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)

订单域职责

订单域的核心职责:

  1. 订单创建:创建订单
  2. 订单管理:订单状态管理
  3. 订单查询:订单信息查询
  4. 订单计算:订单金额计算

订单域实体

// 订单聚合根 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)

支付域职责

支付域的核心职责:

  1. 支付处理:处理支付请求
  2. 支付回调:处理支付回调
  3. 支付状态管理:管理支付状态
  4. 支付记录:记录支付信息

支付域实体

// 支付聚合根 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)

库存域职责

库存域的核心职责:

  1. 库存管理:库存信息管理
  2. 库存扣减:扣减库存
  3. 库存查询:查询库存信息
  4. 库存预警:库存不足预警

库存域实体

// 库存聚合根 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 设计的第一步。

在下一节,我们将学习如何划分限界上下文,明确各个上下文的边界。