Portanto, ainda estou em dúvida se devo ou não usá-las.
Eu sinto que é uma violação extrema do encapsulamento, no entanto, acho que sou capaz de atingir algum grau de encapsulamento enquanto ganho mais flexibilidade no meu código.
Projetos Java / Swing anteriores Eu havia usado classes aninhadas até certo ponto, mas agora mudei para outros projetos em C # e evito o uso deles.
Como você se sente sobre as classes aninhadas?
object-oriented
class
encapsulation
Bryan Harrington
fonte
fonte
Respostas:
Bem, simplificando: as classes aninhadas não violam o encapsulamento e, em geral, os recursos de linguagem não violam os princípios de programação. Programadores violam princípios de programação.
Curiosamente, alega-se que as classes aninhadas aumentam o encapsulamento :
Há alguma verdade nisso.
Normalmente, B é o resultado da aplicação do SRP a A. O próprio B, no entanto, viola muitos princípios, especialmente se tudo o que faz é brincar com os membros privados de A: D
Eu acho que aulas ocultas podem ser úteis. Mas há muito potencial para uso indevido.
fonte
Usamos classes aninhadas o tempo todo. Em muitas situações, os softwares / processos de negócios aninharam objetos de negócios. Todos nós vimos o exemplo de um objeto Order que possui uma coleção aninhada de OrderItems.
A linha inferior é que facilita a leitura / gravação do código e raramente há um caso em que você precisaria da sua classe Order e não precisaria saber sobre OrderItems.
fonte
Pessoalmente, acho que eles devem ser evitados, pois combinam seu design de várias maneiras (geralmente desfavoráveis).
No entanto, se seu projeto tiver um escopo definido e encapsular uma classe (como uma classe Node ou algum tipo de objeto usado para percorrer a estrutura de dados de uma classe específica), não vejo mal.
Na verdade, acho que, para certos tipos de projetos, torna o código (e o raciocínio) mais legível / fácil de entender. No entanto, para a maioria dos projetos com extensibilidade em mente, é uma péssima idéia, porque raramente os separar causará problemas, mas deixá-los juntos pode forçá-lo a dissociá-los no futuro (que é perda de tempo).
fonte
(Em C #) Geralmente, eu os evitava, embora possa depender exatamente qual é o objetivo da classe.
Eu nunca os usaria para qualquer tipo de classe de modelo de domínio, que simplesmente não faz sentido para mim.
Eu costumava usá-los para estruturar dados privados na classe externa, mas descobri que eles quase sempre acabam sendo necessários externamente mais tarde no ciclo de vida do projeto, por isso geralmente não me incomodo mais com isso.
O único momento em que os uso agora é para o pequeno truque de codificação em que o uso de outra classe pequena facilita a implementação de uma classe específica ou a implementação de uma interface que é realmente apenas um padrão de notificação de eventos (em que a classe interna implementa uma interface e apenas passa controle de volta a classe externa).
fonte