Tudo bem ter muitas classes abstratas em seu aplicativo?

9

Inicialmente, queríamos implementar um padrão de estratégia com implementações variadas dos métodos em uma interface comum. Eles serão coletados em tempo de execução com base nas entradas do usuário.

Como se viu, estamos tendo classes abstratas implementando 3 a 5 métodos comuns e resta apenas um método para uma implementação variável, ou seja, a estratégia.

Atualização: Por muitas classes abstratas, quero dizer, existem 6 funcionalidades diferentes de alto nível, ou seja, 6 pacotes, e cada uma possui sua Interface + AbstractImpl + (série de Actual Impl).

Esse é um design ruim de alguma forma?

Quaisquer pontos de vista negativos em termos de extensibilidade posterior - Estou me preparando para uma revisão de código / design com idosos.

JoseK
fonte

Respostas:

8

Não, isso não é de forma alguma um design ruim. É um padrão de método de modelo .

Ele serve para encapsular o comportamento variável de uma etapa do algoritmo, o que provavelmente é o caso no seu cenário. Os padrões de estratégia e método de modelo fazem uma combinação forte em muitos casos. Você provavelmente tem estratégias abstratas como quadro e usa o padrão de método de modelo para estratégias concretas. Isso é bem limpo.

É extensível e você também não precisa repetir o código. Quando você precisar de algo totalmente diferente, basta usar a interface da estratégia para criar uma nova estratégia abstrata ou concreta.

Falcão
fonte
4

Não, pode ser bastante bom (dependendo dos detalhes - é difícil dizer mais com esse pouco conhecimento sobre seu caso concreto). Não há problema em unificar implementações de métodos comuns em uma classe base abstrata.

Dependendo de como o método abstrato único é usado em suas classes, esse padrão pode ser um método Template em vez de Estratégia . Ou seja, se for chamado por algum outro método final na classe base, em vez de diretamente pelo mundo externo.

Péter Török
fonte
1

Padrões de método de modelo fazem com que a subclasse implemente código especial por método abstrato e a subclasse herda o método comum da superclasse. Então, eu não acho que isso tenha muitas classes abstratas, é apenas uma classe abstrata, toda subclasse é classe de instância.

Mark xie
fonte
0

Se as classes abstratas estão implementando os mesmos métodos, com o mesmo conteúdo, por que ter várias classes abstratas?

Se eles estão implementando os métodos de maneira diferente, não vejo problema.

Para melhorar a extensibilidade das interfaces de uso, será menos problemático se você descartar as classes abstratas

Jonno
fonte