抽象类的抽象函数声明有多少?抽象函数过多 - 面向对象的最佳实践
例如,对于会员基础的支付系统:
多种支付方式的支持:
- 信用卡
- 令牌(信用卡支付,但使用令牌)
- 重定向(即贝宝)
- 手动(管理员手动向用户收费)
我有一个抽象类PaymentMode,上面的不同模式扩展到这个类。
每种模式都有以下方法自己独特的逻辑,我必须申报PaymentMode类抽象方法为每个模式中,这些
// each mode has own way of validating the customer data
validate();
// own logic of cleaning customer data (e.g removing/adding/updating)
preparePaymentData();
// returns a string for saving in database, subclass must implement so developers plan to extend the PaymentMode abstract will be forced to return the correct value
getModeOfPayment();
// each mode has its own logic when determining payment gateways to attempt
getGatewaysToAttempt();
// before sending the payment to gateway, each mode has its own logic when adding specific data
addCustomDataSpecificForGateway();
// check if transaction has failed, different payment modes has different logic of determining a failed transaction
isTransactionFailed()
有6种独特的逻辑,我已经成功地共通共同代码已经存在,并将其放在PaymentMode类中。
随着我们实现每种模式独有的新功能,这个数字可能会增加。
在我看来,即时通讯担心如果任何未来的开发者扩展我的PaymentMode类,他必须实现所有的抽象函数声明。
那么大量的抽象函数声明是否表示坏设计?多少太多了?
如果它是一个不好的设计的话,可以给你推荐,将解决这个问题
由于任何技术或设计模式
如果你的抽象类确实没有实现的功能,你不要指望它会,那么你可以只使用_interface_,而不是考虑。如果您想要描述_behavior_的付款,而没有具体说明该行为是什么,那么接口将是非常合适的。 –
@TimBiegeleisen感谢您的建议,但它在我的抽象类具有的功能,因为这些不同的付款方式都有一些共同的功能 – Bogz
我看不出有什么邪恶大约有抽象方法屈指可数。你也可以考虑使用接口和抽象类。 –