实体(Entity)
实体是具有“稳定身份标识”的领域对象,其业务上的“同一性”随时间持久存在,即使属性发生改变也仍是同一个实体。
关键特性
- 唯一标识(ID)定义同一性,等价性基于 ID,而非全部属性
- 拥有状态与行为,状态可变,行为受不变式约束
- 生命周期清晰:创建 → 演进(状态变更)→ 归档/删除
何时建模为实体
- 需要跨用例长期追踪同一对象(例如用户、订单、账户)
- 需要在并发/事务中维护不变式与一致性
- 需要独立的持久化主键
示例(伪代码)
public class Order
{
public Guid Id { get; }
private readonly List<OrderLine> _lines = new();
public Money Total => _lines.Aggregate(Money.Zero, (sum, l) => sum + l.Subtotal);
public void AddLine(ProductId productId, int quantity, Money unitPrice)
{
// 领域不变式:数量>0
if (quantity <= 0) throw new DomainException("Quantity must be positive");
_lines.Add(new OrderLine(productId, quantity, unitPrice));
}
}
上例中 Order 的同一性由 Id 决定;即使订单行改变,Order 仍是同一个实体。