GRASP 之信息专家模式 - Kamil Grzybek

19-09-05 banq
                   

问题:将责任分配给对象的基本原则是什么?

解决方案:将责任分配给具有实现它所需信息的类。

在下面的示例中, Customer类引用了所有客户 订单,因此很自然地负责计算订单的总价值:

public class Customer : Entity, IAggregateRoot  
{
    private readonly List<Order> _orders;
    
    public GetOrdersTotal(Guid orderId) 
    {
        return this._orders.Sum(x => x.Value);
    }
}

这是最基本的原则,因为事实是 - 如果我们没有我们需要的数据,我们无论如何都无法满足要求并分配责任。

(banq注:一般职责行为涉及源与目标两个方面,例如A-->B,那么这个行为应该是放在源对象,还是目标对象,或者根本没有这两个对象,那么设计一个源对象,还是设计一个目标对象,信息专家模式认为设计一个源对象,将这个职责行为包括进来,因为源对象中包含创建目标对象所需的各种信息。

                   

1