Desarrollé nuestra arquitectura de proyecto actual y comencé a desarrollarla por mi cuenta (llegando a algo así como revision 40
) .
Estamos desarrollando un marco de enrutamiento de metro simple y mi diseño parecía estar muy bien: varios modelos principales, vistas correspondientes, lógica principal y estructuras de datos se modelaron "como deberían ser" y se separaron completamente de la representación, también se implementó la parte algorítmica aparte de los modelos principales y tenía un número menor de puntos de intersección.
Yo llamaría a ese diseño escalable, personalizable, fácil de implementar, interactuando principalmente en base a la "interacción de la caja negra" y, bueno, muy agradable.
Ahora, lo que se hizo:
- Comencé algunas implementaciones de las interfaces correspondientes, porté algunas bibliotecas convenientes y escribí apéndices de implementación para algunas partes de la aplicación.
- Tenía el documento que describe el estilo de codificación y ejemplos del uso de ese estilo de codificación (mi propio código escrito).
- Forcé el uso de
C++
técnicas de desarrollo más o menos modernas , incluido elno-delete
código (envuelto mediante punteros inteligentes), etc. - Documenté el propósito de las implementaciones de interfaz concretas y cómo deberían usarse.
- Pruebas unitarias (principalmente, pruebas de integración, porque no había mucho código "real") y un conjunto de simulacros para todas las abstracciones centrales.
Estuve ausente por 12 días .
¿Qué tenemos ahora? (El proyecto fue desarrollado por otros 4 miembros del equipo):
- 3 estilos de codificación diferentes en todo el proyecto (supongo, dos de ellos acordaron usar el mismo estilo :) , lo mismo se aplica al nombramiento de nuestras abstracciones (por ejemplo
CommonPathData.h
,SubwaySchemeStructures.h
) , que son básicamente encabezados que declaran algunas estructuras de datos. - Absoluta falta de documentación para las partes implementadas recientemente.
- Lo que podría llamar recientemente
single-purpose-abstraction
ahora maneja al menos 2 tipos diferentes de eventos, tiene un acoplamiento estrecho con otras partes, etc. - La mitad de las interfaces utilizadas ahora contienen variables miembro
(sic!)
. - Uso de puntero sin procesar en casi todas partes.
- Pruebas unitarias deshabilitadas, porque "
(Rev.57) They are unnecessary for this project
". - ... (eso probablemente no sea todo) .
La historia de commit muestra que mi diseño fue interpretado como una exageración y la gente comenzó a combinarlo con bicicletas personales y ruedas reimplementadas y luego tuvo problemas para integrar fragmentos de código.
Ahora, el proyecto todavía hace solo una pequeña cantidad de lo que tiene que hacer, tenemos graves problemas de integración, supongo que hay pérdidas de memoria.
¿Hay algo posible que hacer en este caso?
Me doy cuenta de que todos mis esfuerzos no tuvieron ningún beneficio, pero la fecha límite es muy pronto y tenemos que hacer algo. ¿Alguien tuvo una situación similar?
Básicamente pensé que un buen comienzo (bueno, hice todo lo que pude) para el proyecto probablemente conduciría a algo bueno, sin embargo, entiendo que estoy equivocado.