Estoy pensando que si una clase será instanciada solo en otra clase, entonces es correcto usarla anidada en esa clase. Creo que esto nos ayudará con un buen diseño. Cuando miro mi proyecto, casi nunca lo he visto anidado estructura.Pero si trato de clases anidadas así que esta vez otras preguntas aparecen en mi mente.Por ejemplo¿Dónde y cómo usar clases anidadas?
Tengo clase de la Junta, Clases de movimiento como ShortCastle, LongCastle, EnPassant, Promote y Piezas como Peón, Reina, Torre, Knight, etc. Por lo tanto, es claro que las clases de la Junta crearán instancias de las clases de las piezas y las clases de las piezas crearán instancias de las clases de Mover. Para un buen diseño, la clase Promover movimiento debe estar anidada de Peón ya que solo el peón puede promoverse a sí mismo. Los Castillos cortos y largos deben ser anidados de Rey porque solo rey puede tener tales movimientos de tipo.
Tratando de poner todas las clases de Piece en la clase Board no está buscando un buen diseño porque la clase 8-9 estará dentro de la clase Board y realmente molesto será un archivo de clase Board demasiado grande y difícil de leer. Prefiero mantener cada clase de pieza en otro archivo. Es bueno que podamos crear una clase parcial de la Junta, pero aún así no es molesto. 8-9 ¿Los archivos de la clase de la Junta Parcial contendrán cada clase de pieza? ¿Es mejor no anidar? Lo mismo ocurre con las Piezas. ¿Crea otro archivo de Pieza parcial solo para otra clase de Tipo de movimiento? Si la clase anidada solo ocupa un espacio pequeño para que no haya ningún problema, pero si toma muchos métodos?
Usted restringe las posibilidades de errores con este diseño. Ninguna de las otras piezas puede crear tal movimiento, incluso erróneamente. Este diseño no lo permite. ¿Estoy equivocado? – Freshblood
Las clases profundamente anidadas limitan su alcance (lo que podría ser una restricción arquitectónica útil en ciertos escenarios), pero está adquiriendo una gran complejidad al principio de su proyecto. Yo recomendaría hacer "lo más simple que podría funcionar" y luego refactorizar a un diseño más complejo cuando surja la necesidad. Más tarde, si desea restringir desde dónde se pueden crear instancias de ciertas clases, podría dividir la solución en diferentes ensamblajes (creando proyectos de "Biblioteca de clases"). ¡Buena suerte! =) –