L'idea "canonica" è pervasiva nel software; modelli come Modello canonico , Canonical Schema , Canonical Data Model e così via, sembrano venire ancora e ancora in sviluppo.
Come molti sviluppatori, ho seguito spesso, acriticamente, la saggezza convenzionale secondo cui hai bisogno di un modello canonico, altrimenti ti troverai di fronte a esplosione combinatoria di mappatori e traduttori. O almeno, io ho usato per farlo fino a un paio di anni fa quando ho letto per la prima volta il famigerato EF voto di non fidarsi :
The hypotheses that once supported the pursuit of canonical data models didn’t and couldn’t include factors that would be discovered once the idea was put into practice. We have found, through years of trial and error, that using separate models for each individual context in which a canonical data model might be used is the least complex approach, is the least costly approach, and the one that leads to greater maintainability and extensibility of the applications and endpoints using contextual models, and it’s an approach that doesn’t encourage the software entropy that canonical models do.
Il saggio non presenta alcuna prova a supporto delle sue affermazioni, ma mi ha fatto dubitare dell'approccio CDM abbastanza a lungo da provare l'alternativa, e il software risultante non è esploso, letteralmente o in senso figurato. Ma questo non significa molto in isolamento; Potrei essere stato solo fortunato.
Quindi mi chiedo, sono state fatte serie ricerche sugli effetti pratici a lungo termine di avere un modello canonico rispetto a modelli contestuali in un sistema o un'architettura software?
Oppure, se è troppo presto per chiederglielo, chiedi a sviluppatori / architetti di parlare di esperienze personali passando da un CDM a modelli contestuali indipendenti, o viceversa, e quali sono stati gli effetti pratici su cose come produttività, complessità, o affidabilità?
Quali sono le differenze a diversi livelli, ovvero utilizzando lo stesso modello in una singola applicazione o utilizzandolo in un sistema di applicazioni o in un'intera azienda?
(Solo fatti, per favore: storie di guerra sono benvenute ma nessuna speculazione.)