Estaba navegando por un proyecto de github y encontré este módulo que tiene más de 10 mil líneas.
¿Es una práctica común tener tanto código en un solo módulo?
Me parece que esto debería dividirse en múltiples módulos. Tal vez uno para cada motor db.
¿Qué beneficio obtiene el desarrollador de hacer un módulo enorme como este (aparte de "tenerlo todo en un solo lugar") o qué inconveniente tiene dividirlo (aparte de "complejidad")?
python
code-quality
modules
Mahmoud Hossam
fuente
fuente
Respuestas:
Lo que encontró es el llamado " objeto de Dios ", porque lo hace todo o lo sabe todo. Huir de él (si puedes).
No hay un número definido de LOC por módulo, pero debería ser algo que facilite la exploración del código y entienda fácilmente lo que están haciendo los métodos. Desde mi experiencia personal, si su módulo va más allá de 1k líneas * , está haciendo algo mal.
* Incluso un módulo de línea 1k es muy grande.
fuente
Esto parece ser un módulo donde los límites de tamaño típicos pueden no aplicarse. La mayoría de la funcionalidad está en las primeras 2k líneas de código y comentarios. El resto del archivo parece ser una gran cantidad de clases de adaptadores y otras clases de soporte que parecen estar estrechamente acopladas al módulo. En otros idiomas las clases estarían en archivos separados de un tamaño razonable.
Algunas cadenas de documentos más podrían ser útiles, pero aumentarían el tamaño de un módulo ya grande. El código es claro y se explica por sí mismo con los comentarios apropiados cuando sea necesario.
fuente
Por supuesto, el "límite" real varía según su proyecto y una multitud de factores.
Pero intervino con una regla general: 200 líneas de Python decente. Es decir, no hay código C o Java escrito en Python, pero sí un buen Python en Python.
fuente
Guau.
Supongo que no sé la respuesta completa para esta, pero me gusta pensar como respuesta a la pregunta del título "¿Qué tan grande debe ser un módulo de Python?" como el concepto de Parnas, ocultando un secreto. En este caso, el módulo parece hacerlo correctamente (y ese es un secreto tan grande que se esconde).
Más tarde estuve investigando documentos que hablan mucho sobre el acoplamiento y la cohesión. ¿Quizás tener muchos módulos db forzaría demasiadas llamadas entre módulos, lo que aumentaría lo que se considera una mala práctica, es decir, menor cohesión y mayor acoplamiento?
He visto datos experimentales que hablan de programadores que deciden sacrificar las buenas prácticas en aras de la simplicidad y la comprensión a pesar de lo que dicte la buena práctica. De hecho, podría haber un conflicto entre las buenas prácticas también. Digamos que el rendimiento no suele hacer felices a las personas que realizan tareas de mantenimiento más adelante. No estoy muy seguro de cómo se mejoraría la legibilidad en este caso con un módulo tan grande.
Otra cosa que noté es que parte del código se declara como genérico y el resto de los dbs se extienden desde él. No soy un programador de Python, pero ¿tal vez esto podría justificar algo?
Por lo tanto, no tengo una respuesta final, ¡pero espero que alguien también resalte estos puntos!
fuente