Va bene avere molte classi astratte nella tua applicazione?


9

Inizialmente volevamo implementare un modello di strategia con diverse implementazioni dei metodi in un'interfaccia comune. Questi verranno raccolti in fase di esecuzione in base agli input dell'utente.

Come si è scoperto, stiamo avendo classi astratte che implementano 3-5 metodi comuni e solo un metodo rimasto per un'implementazione variabile, ad esempio la strategia.

Aggiornamento: Per molte classi astratte intendo che ci sono 6 diverse funzionalità di alto livello, cioè 6 pacchetti, e ognuna ha la sua interfaccia + AbstractImpl + (serie di Actual Impl).

È un cattivo design in qualche modo?

Qualsiasi opinione negativa in termini di estensibilità successiva: mi sto preparando per una revisione del codice / design con gli anziani.

Risposte:


8

No, questo non è affatto un cattivo design. È un modello di metodo modello .

Ha lo scopo di incapsulare il comportamento variabile di un passaggio dell'algoritmo, che è probabilmente il caso nel tuo scenario. In molti casi, i modelli di strategia e di metodo del modello creano una forte combinazione . Probabilmente hai strategie astratte come cornice e usi il modello di modello per strategie concrete. È abbastanza pulito.

È estensibile e inoltre non è necessario ripetere il codice. Quando hai bisogno di qualcosa di completamente diverso, basta usare l'interfaccia della strategia per creare una nuova strategia astratta o concreta.


4

No, può essere abbastanza OK (a seconda dei dettagli - è difficile dire di più con questa piccola conoscenza del tuo caso concreto). È perfettamente corretto unificare implementazioni di metodi comuni in una classe base astratta.

A seconda di come viene utilizzato il singolo metodo astratto nelle tue classi, questo modello potrebbe essere un metodo Modello piuttosto che Strategia . Vale a dire, se viene chiamato da qualche altro metodo finale nella classe base, piuttosto che direttamente dal mondo esterno.


1

Modello Metodo I modelli creano una sottoclasse per implementare un codice speciale mediante un metodo astratto e la sottoclasse eredita il metodo comune dalla superclasse. Quindi non penso che questo abbia molte classi astratte, è solo una delle classi astratte, tutta la sottoclasse è la classe di istanza.


0

Se le classi astratte stanno impiantando gli stessi metodi, con lo stesso contenuto, allora perché avere più classi astratte?

Se stanno implorando i metodi in modo diverso, allora non vedo un problema.

Per migliorare l'estensibilità utilizzare le interfacce, quindi è meno un problema se si eliminano le classi astratte

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.