oop - software - ¿Cuándo es una clase demasiado larga?
software design principles (6)
Cuando piensas que ahora se te hace más difícil manejarlo y te atascas.
¿Cuándo es una función demasiado larga? Es un subconjunto de esta pregunta, creo.
¿Cuáles son algunas métricas buenas para determinar que una clase es demasiado larga?
Estoy revisando un conjunto de pautas de aceptación de código para un proyecto con contratistas externos y me di cuenta de que no lo he cubierto en el pasado, pero debería cubrirlo en el futuro
Cuando tiene más de una responsabilidad.
Permítanme citar el Código Limpio de Robert C. Martin aquí:
La primera regla de las clases es que deben ser pequeñas. La segunda regla de las clases es que deberían ser más pequeñas que eso. ... Con funciones medimos el tamaño contando líneas físicas. Con las clases utilizamos una medida diferente. Contamos responsabilidades. [Capítulo 10, página 136]
Ignorando el patrón de diseño en uso, consideraría el alcance de la responsabilidad que cumple la clase. Si el alcance es demasiado grande, debe dividirse en responsabilidades específicas, abstraerse o hacerse más genérico.
Realmente no tomaría el número de líneas como una métrica significativa.
No más de 17 líneas. Ni mas ni menos. Así que si está por debajo de 17 líneas los retornos de carro harán el truco. Si son más de 17, deberá comenzar a llamar a otras funciones desde dentro de la función.
Por ejemplo:
public function myFunction() {
...
line 17: myFunctionPart2();
}
public function myFunctionPart2() {
...
line 17: myFunctionPart3();
}
Y así.
Su práctica de programación bastante estándar.
Una clase debe tener una sola responsabilidad. Esa es una medida mejor que su longitud. Por lo tanto, al diseñar su código, cada unidad de su diseño (un tipo o una clase) debe ser responsable de una sola cosa (cualquiera sea la "cosa" en su caso). Si lo mantienes lo más simple posible, no te meterás en un lío.
Complejidad de abanico de clases : la cantidad de otras clases en las que se basa una clase dada. También se ha demostrado que el cuadrado de esto indica la cantidad de mantenimiento requerido en los programas funcionales (sobre una base de archivo) al menos.
Complejidad ciclomática : verifica la complejidad ciclomática contra un límite especificado. La complejidad se mide por el número de if, while, do, for,?:, Catch, switch, case statement, y operadores && y || (más uno) en el cuerpo de un constructor, método, inicializador estático o inicializador de instancia. Es una medida del número mínimo de rutas posibles a través de la fuente y, por lo tanto, del número de pruebas requeridas. En general, 1-4 se considera bueno, 5-7 ok, 8-10 considera re-factoring, y 11+ re-factor ahora!