2009-03-23 9 views
5

Me parece que tengo varios lugares que tienen clases internas estáticas públicas diseñadas que amplían las clases de "ayuda", lo que hace que mi código sea mucho más seguro y, en mi opinión, legible. Por ejemplo, imagine que tengo una clase "SearchCriteria". Hay muchas cosas en común para las diferentes cosas que busco (un término de búsqueda y luego un grupo de tipos de términos de búsqueda, un rango de fechas, etc.) Extendiéndolo en una clase interna estática, aprieto bien la extensión y la búsqueda clase con las diferencias específicas. Este parece como una mala idea en teoría (Tight Coupling Bad!) Pero la extensión es específica para esta clase de búsqueda (One Class, One Purpose).¿Son las clases internas estáticas una buena idea o un diseño deficiente?

Mi pregunta es, en su experiencia, si el uso de clases internas estáticas (o cualquiera que sea su equivalente de idioma) hizo que su código sea más legible/mantenible o esto terminó mordiéndolo en el EOF?

Además, no estoy seguro si este es el material de wiki de la comunidad o no.

+0

¿Es una pregunta objetiva?¿Puede haber una respuesta correcta? Si no, es un tema de discusión, mejor hecho como wiki de la comunidad. –

+0

¿De qué lengua (s) está hablando? La mayoría de los lenguajes no tienen ningún concepto como clase interna estática. –

+0

S.Lott: suficiente. Comunidad Wiki -ized entonces. Neil Butterworth: ¿Supongo que la mejor opción de redacción serían las clases anidadas en lugar de las estáticas internas? Y esto es originalmente Java. – Drew

Respuesta

2

Suena perfectamente razonable para mí. Al convertirlo en una clase interna, está haciendo que sea fácil de encontrar y un candidato obvio para revisar cuando cambia la clase de búsqueda.

El acoplamiento estricto solo es malo cuando se combinan elementos que realmente no pertenecen solo porque uno de ellos llama al otro. Para las clases que colaboran estrechamente, p. cuando, como en su caso, uno de ellos existe para apoyar al otro, entonces se llama "cohesión", y es lo bueno.

-2

El punto en "acoplamiento libre" es mantener las dos clases separadas de modo que si hay cambios de código en su clase "SearchCriteria", nada tendría que cambiar en las otras clases. Creo que las clases internas estáticas de las que estás hablando podrían hacer que mantener el código sea una pesadilla. Un cambio en SearchCriteria podría enviarte a buscar entre todas las clases estáticas para descubrir cuáles ahora están rotas debido a la actualización. Personalmente, me mantendría alejado de tales clases internas a menos que realmente lo necesite por alguna razón.

+0

¿Cómo es eso peor que andar buscando entre muchas subclases de nivel superior que podrían ser interrumpidas por un cambio? De ningún modo. –

1

Tenga en cuenta que la clase no es la unidad de reutilización. Por lo tanto, algunos acoplamientos entre clases son normales y esperados. La unidad de reutilización suele ser una colección de clases relacionadas.

En Python, tenemos una variedad de estructuras.

  1. Paquetes. Ellos contienen módulos. Estos son esencialmente directorios con un poco de maquinaria Python.

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

  3. Clases. Estos pueden contener definiciones de clases internas así como también funciones de métodos. A veces (no muy a menudo) las clases internas realmente pueden ser utilizadas. Esto es raro, ya que el acoplamiento a nivel de módulo entre clases suele ser perfectamente claro.

1

La única advertencia al usar clases internas es asegurarse de que no se está repitiendo por todas partes, sino que - asegúrese, cuando defina una clase interna, que no vaya a necesitar usar esa funcionalidad en ningún lado más, y, esa funcionalidad está necesariamente acoplada con la clase externa. No desea terminar con un montón de clases internas que implementan exactamente el mismo método setOrderyByNameDesc().

Cuestiones relacionadas