2011-01-18 15 views
35

A algunos les gustaría argumentar que este es un candidato para el tema menos importante de todos los tiempos. Sin embargo, el estilo del código es un tema muy importante para mí, y quiero asegurarme de que escribo el código de una manera legible, para mí y para la mayoría de los desarrolladores.¿Dónde poner clases internas?

Es por eso que me pregunto dónde están declarando sus clases internas.

Estoy siguiendo el siguiente esquema método de ordenación, ya que es bastante común:

public void foo() { 
    usedByFoo(); 
} 

private void usedByFoo() { 
} 

public void bar() { 
} 

I ordenar de arriba a abajo, todos los métodos lo más cercano a donde se utiliza.

Ahora podría hacer lo mismo con las clases internas, así:

class Outer { 
    private Inner inner; 

    private class Inner {}; 

    public Outer() { 
    } 

    ... 
} 

Creo que este es el estilo más consistente a seguir para mí, pero también he visto la gente a menudo declaro todas las clases internas, ya sea en la parte superior o inferior del archivo.

¿Qué estilo debo seguir, dada mi forma de ordenar los métodos? ¿Cuál es la forma más común de hacer esto?

+1

Me siento como el estilo del código es demasiado subjetivo ... tal vez estoy equivocado. Solo documente el infierno. –

+1

Tal vez esto pertenece más a http://programmers.stackexchange.com/ –

+0

@Amir Sí, las preguntas del estilo de codificación prosperan en allí. –

Respuesta

42

Declararía clases internas en la parte inferior del archivo; por lo general, no estás interesado en sus implementaciones y solo quieres acceder a los métodos de tu clase principal, por lo que no deberían interferir.

+6

Me gustaría añadir que si hay tantas clases internas que se vuelve confuso, es hora de factorizar algunas de ellas en las clases de nivel superior. – biziclop

+0

Casi todos los votos por respuesta y ninguna otra respuesta, supongo que ese es el camino a seguir entonces, gracias! –

9

Mi estilo preferido es colocarlos donde parezcan tener más sentido. Por lo general, esto está en la parte inferior, por lo que están fuera del camino, pero a veces creo que tiene más sentido ponerlos antes de cierto grupo de métodos (si estos son los métodos que usan la clase interna).

Si el la clase se vuelve demasiado difícil de manejar con muchos métodos y clases internas, probablemente sea una mala elección de diseño (la cohesión es demasiado baja). A veces dejo que las clases lleguen de esta manera por accidente y son horribles de tratar más tarde, estos días si Veo que uno va de esa manera, generalmente lo refactorizaré, tal vez incluso en su propio paquete. Si llegas al punto en el que tienes tantas clases internas que no sabes qué hacer con ellas, tomaría este enfoque. Incluso hay algunos que desaconsejan el uso de clases internas por este motivo (aunque no estoy de acuerdo, son un recurso valioso cuando se usan correctamente, solo hay que cuidar que no se salgan de control.