Czy możesz mieć wiele klas abstrakcyjnych w swojej aplikacji?

9

Początkowo chcieliśmy wdrożyć wzorzec strategii z różnymi implementacjami metod w interfejsie komunikacyjnym. Zostaną one odebrane w czasie wykonywania na podstawie danych wejściowych użytkownika.

Jak się okazało, mamy klasy abstrakcyjne implementujące 3 - 5 typowych metod i pozostała tylko jedna metoda dla różnych implementacji, tj. Strategia.

Aktualizacja: Przez wiele klas abstrakcyjnych mam na myśli 6 różnych funkcji wysokiego poziomu, tj. 6 pakietów, a każda z nich ma swój interfejs + AbstractImpl + (seria Actual Impl).

Czy to w jakiś sposób jest zły projekt?

Wszelkie negatywne opinie w zakresie późniejszej rozszerzalności - przygotowuję się do przeglądu kodu / projektu z seniorami.

JoseK
źródło

Odpowiedzi:

8

Nie, to wcale nie jest zły projekt. Jest to wzorzec metody szablonu .

Ma to na celu zawarcie różnych zachowań kroku algorytmu, co prawdopodobnie ma miejsce w twoim scenariuszu. Wzory strategii i szablonów stanowią w wielu przypadkach silną kombinację . Prawdopodobnie masz abstrakcyjne strategie jako ramkę i używasz wzorca metody szablonu do konkretnych strategii. To całkiem czyste.

Jest rozszerzalny i nie musisz powtarzać kodu. Jeśli potrzebujesz czegoś zupełnie innego, po prostu użyj interfejsu strategii, aby utworzyć nową abstrakcyjną lub konkretną strategię.

Sokół
źródło
4

Nie, może być całkiem OK (w zależności od szczegółów - przy tej niewielkiej wiedzy na temat konkretnego przypadku trudno powiedzieć więcej). Ujednolicenie implementacji metod w abstrakcyjnej klasie bazowej jest całkowicie w porządku.

W zależności od tego, w jaki sposób używana jest jedna metoda abstrakcyjna w twoich klasach, ten wzorzec może być metodą szablonową, a nie strategiczną . Mianowicie, jeśli jest wywoływana przez inną, ostateczną metodę w klasie bazowej, a nie bezpośrednio przez świat zewnętrzny.

Péter Török
źródło
1

Metoda szablonów Wzorce tworzą podklasę do implementacji specjalnego kodu metodą abstrakcyjną, a podklasa dziedziczy wspólną metodę z nadklasy. Więc nie sądzę, że ma wiele klas abstrakcyjnych, to tylko jedna klasa abstrakcyjna, wszystkie podklasy są klasami instancji.

Mark xie
źródło
0

Jeśli klasy abstrakcyjne wykorzystują te same metody o tej samej treści, to dlaczego istnieje wiele klas abstrakcyjnych?

Jeśli wszczepiają metody inaczej, nie widzę problemu.

Aby polepszyć rozszerzalność, użyj interfejsów, wtedy mniejszy problem, jeśli złomujesz klasy abstrakcyjne

Jonno
źródło