想象一个应用程序,其中您有一个名为 Transaction 的类来表示金融交易。
这些事务可以根据事务类的属性值和一些业务规则进行分类。
一个名为 TransactionType 的枚举表示此类分类的可能值:Type1Transaction、Type2Transaction、NotRelevant。
Type1Transactions 和 Type2Transactions 会被报告,因为它们有些可疑,NotRelevant 交易不会被报告。
这种分类只是为了报告交易而有趣,并不代表 Transaction 类的内在属性(这就是为什么 Transaction 类没有代表这种分类的属性)。
好吧,此时我们要编写一个类,其职责是确定给定事务的分类,我们称之为 TransactionClassificator。
它的接口公开了一个方法GetTransactionType(),它的返回值为TransactionType。最明显的实现如下:
public TransactionType GetTransactionType()
{
if(IsType1Transaction())
return TransactionType.Type1Transaction;
if(IsType2Transaction())
return TransactionType.Type2Transaction;
return TransactionType.NotRelevant;
}
这种方法显然违反了 OCP 原则:它不接受修改,因为每次引入 enum TransactionType 的新值时都必须修改它。我不知道在这种特定情况下如何使用抽象来纠正违反 OCP 原则的问题。
感谢您的帮助。
恩里科