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

时间:2017-06-08 14:29:55

标签: java oop

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

现在我的直接设计看起来像这样:

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

退款类在构造函数中包含Bank。

退款等级的粗略伪代码

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. 如何用面向对象的设计替换Refund类,这是可扩展的,我不需要使用if-else?

  2. 即时选项是将退款功能转移到员工类,然后各个子类型可以自行退款。但是,将员工类与Refund逻辑复杂化是有意义的(鉴于它的复杂功能,它会保留自己的模块化类)?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

员工 - >帐户[]类型,货币 - >项[]

员工 - >账户[]包含货币 - >具有类型

的条目[]

您可以将每个帐户用于类型(退款)和货币,或者更好地使用仅适用于每种货币的帐户和带有类型的条目(退款)

其余的应该由服务完成!

答案 2 :(得分:1)

在我简要阅读你的问题后,我认为双重发送是你所寻求的。 见e。 G。 https://sourcemaking.com/design_patterns/visitor/java/2