Pergunta

Eu estou encontrar eu tenho vários lugares que ter classes internas estáticas pública projetados que se estendem classes "ajudante" faz meu código muito mais tipo seguro e, na minha opinião, legível. Por exemplo, imagine que eu tenha uma classe "searchCriteria". Há uma série de pontos em comum para as coisas diferentes que eu procurar (um termo de pesquisa e, em seguida, um grupo de tipos de termo de pesquisa, um intervalo de datas, etc.), estendendo-o em uma classe interna estática, eu firmemente casal a extensão eo pesquisável classe com as diferenças específicas. Este parece como uma má ideia em teoria (Apertado Coupling Bad!), Mas a extensão é específica para esta classe pesquisável (uma classe, Um Propósito).

A minha pergunta é, em sua experiência, tem o uso de classes internas estáticas (ou qualquer que seja sua equivelent linguagem é) fez seu código mais legível / passível de manutenção ou tenha isso acabou mordendo-o no EOF?

Além disso, eu não tenho certeza se isso é material comunidade wiki ou não.

Foi útil?

Solução

Sounds perfeitamente razoável para mim. Ao torná-lo uma classe interna, você está tornando mais fácil de encontrar e um candidato óbvio para revisão quando as mudanças de classe pesquisável.

acoplamento forte só é ruim quando você algumas coisas que realmente não pertencem juntos apenas porque um deles acontece para chamar o outro. Para as classes que colaboram estreitamente, por exemplo quando, como no seu caso, um deles existe para apoiar o outro, então ele é chamado de "coesão", e é uma coisa boa .

Outras dicas

Note que a classe não é a unidade de reutilização. Portanto, alguns de acoplamento entre as classes é normal e esperado. A unidade de reutilização é geralmente uma coleção de classes relacionadas.

Em Python, temos uma variedade de estruturas.

  1. Pacotes. Eles contêm módulos. Estes são essencialmente diretórios com um pouco de máquinas Python jogado.

  2. Modules. Eles contêm classes (e) funções. Estes são arquivos; e pode conter qualquer número de classes estreitamente relacionadas. Muitas vezes, o negócio "classe interna" é tratado a este nível.

  3. classes. Estes podem conter definições de classe internos, bem como funções de método. Às vezes (não muito frequentemente) pode realmente ser usado classes internas. Isso é raro, uma vez que o acoplamento do nível de módulo entre as classes geralmente é perfeitamente claro.

A única ressalva com o uso de classes internas é ter certeza que você não está se repetindo em todo o lugar - como em - Certifique-se, quando você define uma classe interna, você não vai precisar usar essa funcionalidade em qualquer outro lugar , e, que esta funcionalidade é necessariamente acoplada com a classe externa. Você não quer acabar com um monte de classes internas que todos implementar exatamente o mesmo método setOrderyByNameDesc().

O ponto de "acoplamento" é manter as duas classes separadas, de modo que se houver alterações de código em seu "searchCriteria" class nada teria que ser a mudança nas outras classes. Eu acho que as classes internas estáticas que você está falando poderia, potencialmente, fazer a manutenção de código de um pesadelo. Uma mudança na searchCriteria poderia enviar procura através de todas as classes estáticas para descobrir quais são agora quebrado por causa da atualização. Pessoalmente, gostaria de ficar longe de qualquer dessas classes internas a menos que seja realmente necessário por algum motivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top