¿Dónde poner las clases internas? [cerrado]


Algunos podrían argumentar que este es un candidato para el tema menos importante de todos los tiempos. Sin embargo, el estilo de código es un tema muy importante para mí, y quiero asegurarme de que escribo código de una manera legible, para mí y para la mayoría de los desarrolladores.

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

Estoy siguiendo el siguiente esquema de ordenación de métodos, porque es bastante común:

public void foo() {
    usedByFoo();
}

private void usedByFoo() {
}

public void bar() {
}

Los ordeno de arriba a abajo, cada método lo más cerca posible a donde se usa.

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 a menudo personas declaran todas las clases internas, ya sea en la parte superior o en la parte 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?

Author: Etienne Neveu, 2011-01-19

2 answers

Yo declararía clases internas en la parte inferior del archivo-normalmente no estás interesado en sus implementaciones y solo quieres llegar a los métodos de tu clase principal, por lo que no deberían interponerse.

 47
Author: Amir Rachum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-18 23:14:46

Mi estilo preferido es ponerlos 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 me parece que tiene más sentido ponerlos antes de un cierto grupo de métodos (si estos son los métodos que utilizan la clase interna.)

Si la clase se vuelve demasiado difícil de manejar con un montón de métodos y clases internas, probablemente sea una mala elección de diseño (la cohesión es demasiado baja. A veces he dejado que las clases se pongan así por accidente y son horribles para tratar con más tarde-en estos días, si puedo ver que uno va en esa dirección, 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 aconsejan no usar clases internas por esta razón (aunque no estoy de acuerdo: son un recurso valioso cuando se usan correctamente, solo debes tener cuidado de que no se salgan de control.

 9
Author: Michael Berry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-19 00:35:29