2011-08-23 104 views
2

我有一个场景,我正在处理MailItems队列。一旦我处理了每个MailItem,我需要更新MailItem的状态。更新状态的逻辑非常复杂。我的想法是,我不应该将逻辑本身封装在MailItem类中,而是将其封装在单独的类中,以便将来进行维护。我应该如何实现复杂的业务逻辑?

因此,我的问题是做这件事的最好方法是什么?

我考虑了规范模式。我对这个模式的研究是它的铰链定义为ISpecification界面如下:

public interface ISpecification<T> 
{ 
    bool IsSatisfiedBy(T candidate); 
} 

我的问题是,我在这种特殊情况下的逻辑不仅是由候选对象的内部状态的影响,也受到一个外部价值,我需要通过考虑的逻辑。

所以,在我的MailItem方法签名必须是这个样子:

public void ChangeStatus(bool mailSentSuccessfully) 

标准ISpecification接口并不满足通过在外部值。我是否简单地“弯曲”标准实现,或者这是否打破了模式定义的“规则”?如果这不是答案,我可以看看其他基于模式的选项?

回答

1

您可以使用规范模式,因为它只是使用包含其他对象的候选类型,即通过扩展ISpecification<Pair<MainType,ExternalType>>来构建对的构建验证。

如果您不是使用已提供PairTuple类型的语言工作,那么您当然也必须创建该语言以使用此策略。

如果这不适合你,那么在模式上构建你自己的变体当然没关系。他们真的不是设计规则,而是指导。