GRASP 之資訊專家模式 - Kamil Grzybek

banq發表於2019-09-05

問題:將責任分配給物件的基本原則是什麼?

解決方案:將責任分配給具有實現它所需資訊的類。

在下面的示例中, 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,那麼這個行為應該是放在源物件,還是目標物件,或者根本沒有這兩個物件,那麼設計一個源物件,還是設計一個目標物件,資訊專家模式認為設計一個源物件,將這個職責行為包括進來,因為源物件中包含建立目標物件所需的各種資訊。

相關文章