La idea "canónica" es generalizada en el software; patrones como el modelo canónico , el esquema canónico , el modelo de datos canónico , etc., parecen aparecer una y otra vez en el desarrollo.
Como muchos desarrolladores, a menudo he seguido, sin crítica, la sabiduría convencional de que necesita un modelo canónico, de lo contrario, se enfrentará a una explosión combinatoria de mapeadores y traductores. O al menos, solía hacerlo hasta hace un par de años, cuando leí por primera vez el infame Voto sin confianza de EF :
Las hipótesis que una vez respaldaron la búsqueda de modelos de datos canónicos no incluyeron ni pudieron incluir factores que se descubrirían una vez que la idea se pusiera en práctica. Hemos descubierto, a través de años de prueba y error, que el uso de modelos separados para cada contexto individual en el que se podría usar un modelo de datos canónicos es el enfoque menos complejo, el enfoque menos costoso y el que conduce a una mayor capacidad de mantenimiento y extensibilidad de las aplicaciones y puntos finales utilizando modelos contextuales, y es un enfoque que no fomenta la entropía del software que hacen los modelos canónicos.
El ensayo no presenta evidencia de ningún tipo para respaldar sus afirmaciones, pero me hizo cuestionar el enfoque del MDL el tiempo suficiente para probar la alternativa, y el software resultante no explotó, literal o figurativamente. Pero eso no significa mucho aislamiento; Podría haber tenido suerte.
Entonces, me pregunto, ¿se ha realizado alguna investigación seria sobre los efectos prácticos a largo plazo de tener un modelo canónico versus modelos contextuales en un sistema o arquitectura de software?
O, si es demasiado pronto para preguntar eso, ¿tiene algún desarrollador / arquitecto escrito sobre experiencias personales que cambien de un MDL a modelos contextuales independientes, o viceversa, y cuáles fueron los efectos prácticos en cosas como la productividad, la complejidad o la confiabilidad?
¿Qué pasa con las diferencias en los diferentes niveles, es decir, usar el mismo modelo en una sola aplicación versus usarlo en un sistema de aplicaciones o en toda una empresa?
(Solo hechos, por favor; las historias de guerra son bienvenidas pero no se especulan).