【发布时间】:2017-12-03 22:36:14
【问题描述】:
Abstract 类的抽象函数声明有多少?
例如,对于基于会员的支付系统:
支持多种支付方式:
- 信用卡
- 令牌(信用卡支付,但使用令牌)
- 重定向(即 Paypal)
- 手动(管理员手动向用户收费)
我有一个抽象类 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 类,他必须实现所有抽象函数声明。
那么大量的抽象函数声明是否表明糟糕的设计?多少算太多?
如果它是一个糟糕的设计,你能推荐任何可以解决这个问题的技术或设计模式
谢谢
【问题讨论】:
-
如果您的抽象类确实没有实现功能,并且您不希望它会实现,那么您可以考虑只使用 接口。如果您想描述付款的行为,而不具体指定行为是什么,那么使用接口将是一个非常合适的选择。
-
@TimBiegeleisen 感谢您的建议,但我的抽象类中包含一些功能,因为这些不同的支付方式共享一些共同的功能
-
我不认为拥有一些抽象方法有什么不好的。您还可以考虑同时使用接口和抽象类。
标签: oop abstract-class