GRASP之多态性模式 - Kamil Grzybek


问题:如何根据类型处理替代方案?
解决方案:当相关的替代或行为因类型(类)而异时,将行为(使用多态操作)的责任分配给行为变化的类型。
多态性是面向对象设计的基本原则。在这种情况下,原则与(以及其他)战略策略模式密切相关。

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));
}

我们可以根据需要提供此接口的不同实现。一般来说,当我们在我们的系统中具有相同输入和输出(在结构方面)的不同算法时,这是非常有用的方法。