良好的OO实践+为了OO而我们应该在子类中实现复杂的逻辑吗?



我有一个员工分为两个(国内和国际(。我还有另一类退款,用于向员工退款。我有一个名为"银行帐户"的类,该类由退款类用于退款。

现在我的直接设计如下所示:

员工界面,有国内和国际2个子类型。

退款类在构造函数中采用银行。

退款类的粗略伪代码

Class Refund
    Refund( bank account )
   Public class Refund( employee ) {
         If (employee is domestic) {
             Pay to bank
             Account for taxes
        } else {
           do currency conversion
           Pay to bank 
           Call some 3rd party to do taxation
       }
    }
}

现在这是我的问题:

  1. 如何将退款类替换为面向对象的设计,这是可扩展的,我不需要使用if-else?

  2. 直接选项是将退款功能转移到员工类中,然后各个子类型可以执行自己的退款逻辑。但是 - 用退款逻辑使员工类复杂化是否有意义(鉴于其复杂的功能,它应该有自己的模块化类(?

在我简要阅读了您的问题之后,我认为双重调度是您所寻求的。例如,参见 https://sourcemaking.com/design_patterns/visitor/java/2<</p>

div class="one_answers">

为了保持 OO 设计并使其可扩展,而不将功能转移到 Employee 类,也许您只需向员工类添加属性,例如员工类型(国内/国际(以及退款类型,然后您可以使用现在可扩展的退款类进行特定类型的退款?

员工 -> 帐户[] 与类型、货币 -> 条目[]

员工 -> 具有货币的帐户[] -> 条目 [] 与类型

您可以将每个帐户用于类型(退款(和货币,或者最好是仅将帐户用于每种货币和类型为(退款(的条目

其余的应该由服务完成!

最新更新