【发布时间】:2016-03-14 13:27:13
【问题描述】:
我正在尝试实施领域驱动设计 (DDD),同时使用 SOLID 设计原则,但有以下问题:
如果我的领域实体仅包含状态,并且在通用语言中与它们相关联的行为方法被放置在单独的类中,这是否会归类为贫乏领域模型或富领域模型?
例如,不要在我的实体上使用它:
class Order
{
public virtual void Ship();
}
我实际上已将其分解为一个单独的 OO 类:
class Shipper
{
public virtual void Ship(Order order);
}
在我看来,这仍然是在“模型”内部,而不是服务/应用层,因此我相信这仍然是一个丰富的领域模型。
但是,我可以委托检索我的订单并将其运送到服务层的调用,如下所示:
class OrderService
{
//private member construction ommitted for brevity
Repository _repository;
ShipOrder _shipper;
public void Ship(int orderId)
{
Order order = _repository.GetOrder(orderId);
_shipper.Ship(order);
}
}
未在域实体内部实现行为逻辑的原因是,实现它会违反单一职责原则,因为我的实体的职责是在我的域中维护和存储状态。但是,我对此的看法可能是主观的。
【问题讨论】:
-
问问自己,发货意味着什么?它如何影响系统的状态?需要强制执行哪些不变量以及在运输过程中发挥作用的其他组件(例如外部系统)?最后,您是否应该使用域服务或将行为放在 AR 上可能会变得很清楚。
标签: entity domain-driven-design behavior service-layer