Resumen
Como JacquesB escribe, no todos están de acuerdo con el "Código Limpio" de Robert C. Martin.
Es probable que los proyectos de código abierto que descubriste que "violan" los principios que esperabas simplemente tengan otros principios.
Mi perspectiva
Superviso varias bases de códigos que se adhieren mucho a los principios de Robert C. Martin. Sin embargo, no afirmo realmente que tengan razón , solo puedo decir que funcionan bien para nosotros , y que "nosotros" es de hecho una combinación de al menos
- El alcance y la arquitectura de nuestros productos,
- las expectativas del mercado objetivo / cliente,
- cuánto tiempo se mantienen los productos,
- la metodología de desarrollo que usamos,
- la estructura organizativa de nuestra empresa y
- Los hábitos, opiniones y experiencia pasada de nuestros desarrolladores.
Básicamente, esto se reduce a: cada equipo (ya sea una empresa, un departamento o un proyecto de código abierto) es único. Tendrán diferentes prioridades y diferentes puntos de vista, y por supuesto harán diferentes compensaciones. Estas compensaciones, y el estilo de código que dan como resultado, son en gran medida una cuestión de gustos y no se puede demostrar que sean "incorrectas" o "correctas". Los equipos solo pueden decir "hacemos esto porque funciona para nosotros" o "deberíamos cambiar esto porque no funciona para nosotros".
Dicho esto, creo que para poder mantener con éxito grandes bases de código durante años, cada equipo debe acordar un conjunto de convenciones de código que consideren adecuadas para los aspectos mencionados anteriormente. Eso puede significar adoptar prácticas de Robert C. Martin, de otro autor, o inventar las suyas propias; puede significar escribirlos formalmente o documentarlos "por ejemplo". Pero deberían existir.
Ejemplo
Considere la práctica de "dividir el código de un método largo en varios métodos privados".
Robert C. Martin dice que este estilo permite limitar el contenido de cada método a un nivel de abstracción - como un ejemplo simplificado, un método público probablemente sólo representan todas las llamadas a métodos privados como verifyInput(...)
, loadDataFromHardDisk(...)
, transformDataToJson(...)
y, por último sendJsonToClient(...)
, y estos métodos tendría Los detalles de implementación.
- A algunas personas les gusta esto porque los lectores pueden obtener una visión general rápida de los pasos de alto nivel y pueden elegir sobre qué detalles quieren leer.
- A algunas personas no les gusta porque cuando quieres conocer todos los detalles, tienes que saltar en la clase para seguir el flujo de ejecución (esto es a lo que JacquesB probablemente se refiere cuando escribe sobre agregar complejidad).
La lección es: todos tienen razón, porque tienen derecho a tener una opinión.