Pregunta

Me parece que tengo varios lugares que tienen las clases internas estáticas públicas diseñadas que se extienden "ayudante" clases hace que mi código mucho más seguro y, en mi opinión, legible tipo. Por ejemplo, imagina que tengo una clase "searchCriteria". Hay una gran cantidad de puntos comunes para las diferentes cosas que busco (un término de búsqueda y, a continuación un grupo de tipos de términos de búsqueda, un intervalo de fechas, etc.), extendiéndolo en una clase interna estática, yo bien acoplar la extensión y la búsqueda clase con las diferencias específicas. Esta parece como una mala idea en teoría (Ajustado acoplamiento malo!) Pero la extensión es específico para esta clase de búsqueda (una clase, un propósito).

Mi pregunta es, en su experiencia, tiene el uso de clases internas estáticas (o lo que su lenguaje es equivelent) realizado su código sea más legible / mantenible o tiene esto terminó que muerde en el EOF?

Además, no estoy seguro de si se trata de material de wiki de la comunidad o no.

¿Fue útil?

Solución

suena perfectamente razonable para mí. Por lo que es una clase interna, que está haciendo que sea fácil de encontrar y un candidato obvio para su revisión cuando los cambios de clase de búsqueda.

estrecho acoplamiento sólo es malo cuando se lo pareja que no pertenecen realmente juntos sólo porque uno de ellos pasa a llamar a la otra. Para las clases que colaboran estrechamente, por ejemplo cuando, como en su caso, uno de ellos existe para apoyar al otro, entonces se llama la "cohesión", y es un bueno .

Otros consejos

Tenga en cuenta que la clase no es la unidad de reutilización. Por lo tanto, algunos de acoplamiento entre las clases es normal y esperado. La unidad de reutilización es por lo general una colección de clases relacionadas.

En Python, que tienen una variedad de estructuras.

  1. Paquetes. Contienen módulos. Se trata esencialmente de directorios con un poco de maquinaria Python tirado.

  2. Módulos. Contienen clases (y funciones). Estos son los archivos; y puede contener cualquier número de clases estrechamente relacionadas. A menudo, el negocio de "clase interna" se maneja en este nivel.

  3. Las clases. Estos pueden contener definiciones de clases interiores, así como funciones de método. A veces (no muy a menudo) se pueden usar en realidad las clases internas. Esto es raro, puesto que el acoplamiento de nivel de módulo entre las clases suele ser perfectamente claro.

La única advertencia con el uso de clases internas es asegurarse de que no estás repitiendo por todo el lugar - como en - asegúrese de que, cuando se define una clase interna, no vas a tener que usar esa funcionalidad en otro sitio y, que de que la funcionalidad está necesariamente acoplado con la clase externa. Usted no quiere terminar con un montón de clases internas que todos implemento exactamente el mismo método setOrderyByNameDesc().

El punto en el "acoplamiento débil" es mantener las dos clases separadas de manera que si hay cambios en el código en su "searchCriteria" clase nada tendría que ser el cambio en las otras clases. Creo que las clases internas estáticas que está hablando podrían, potencialmente, hacer el mantenimiento de código de una pesadilla. Un cambio en searchCriteria que podría enviar búsqueda a través de todas las clases estáticas de averiguar cuáles están rotos a causa de la actualización. Personalmente, me quedaría lejos de cualquiera de dichas clases internas a menos que sea realmente necesario por alguna razón.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top