抽象クラスの抽象関数宣言の数が多すぎますか?抽象関数が多すぎます - OOPベストプラクティス
例えば、会員ベースの決済システムのために:
複数の支払モードがサポートされています。
- クレジットカード
- トークン(クレジットカードでのお支払いが、トークンを使用して)
- リダイレクト(Paypal)
- マニュアル(手動でユーザを管理する)
私は抽象クラス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()
のために、各モードは以下のメソッドの独自のロジックを持っていると私はPaymentModeクラスで抽象メソッドを宣言する必要があり、各モードの6ユニークなロジック、私は、共通の共通化するために管理してきましたコードは既にPaymentModeクラスの中に置かれています。
この番号は、各モードに固有の新機能を実装するにつれて大きくなる場合があります。
将来の開発者がPaymentModeクラスを拡張した場合、すべての抽象関数宣言を実装する必要があると私は心配しています。
多くの抽象関数宣言には、という悪いデザインがありますか??どれくらいのものがいくらですか?
その悪いデザインならば、あなたはこの問題を解決する任意の技術やデザインパターンをお勧めすることができます
おかげ
あなたの抽象クラスに実際に実装された機能がなく、それが期待されない場合は、代わりに_interface_を使用することもできます。振る舞いが何であるかを正確に指定することなく、支払いの_behavior_を記述したい場合、インターフェースは非常に適切なものになります。 –
@TimBiegeleisenあなたの提案に感謝します。しかし、私の抽象クラスは、これらの異なる支払いモードが共通の機能を共有しているため、機能を持っています。 – Bogz
抽象メソッドをほんの少ししか持たないということはありません。また、インタフェースと抽象クラスの両方の使用を検討することもできます。 –