GRASP之多型性模式 - Kamil Grzybek

banq發表於2019-09-05

問題:如何根據型別處理替代方案?
解決方案:當相關的替代或行為因型別(類)而異時,將行為(使用多型操作)的責任分配給行為變化的型別。

多型性物件導向設計的基本原則。在這種情況下,原則與(以及其他)戰略策略模式密切相關。

Customer類的建構函式 將 ICustomerUniquenessChecker介面作為引數:

public Customer(string email, string name, ICustomerUniquenessChecker customerUniquenessChecker)
{
    this.Email = email;
    this.Name = name;

    var isUnique = customerUniquenessChecker.IsUnique(this); // doing - initiate and coordinate actions with other objects
    if (!isUnique)
    {
        throw new BusinessRuleValidationException("Customer with this email already exists.");
    }

    this.AddDomainEvent(new CustomerRegisteredEvent(this));
}


我們可以根據需要提供此介面的不同實現。一般來說,當我們在我們的系統中具有相同輸入和輸出(在結構方面)的不同演算法時,這是非常有用的方法。

相關文章