L'idea "canonica" è pervasiva nel software; modelli come Modello canonico , Schema canonico , Modello dati canonico e così via, sembrano emergere ancora e ancora in fase di sviluppo.
Come molti sviluppatori, ho spesso seguito, acriticamente, la saggezza convenzionale secondo cui hai bisogno di un modello canonico, altrimenti dovrai affrontare un'esplosione combinatoria di mappatori e traduttori. O almeno, ho usato per fare che fino a un paio di anni fa, quando ho letto il po-infame EF voto di sfiducia :
Le ipotesi che un tempo sostenevano il perseguimento di modelli di dati canonici non erano e non potevano includere fattori che sarebbero stati scoperti una volta che l'idea sarebbe stata messa in pratica. Abbiamo scoperto, attraverso anni di tentativi ed errori, che l'utilizzo di modelli separati per ogni singolo contesto in cui un modello di dati canonico potrebbe essere utilizzato è l'approccio meno complesso, è l'approccio meno costoso e quello che porta a una maggiore manutenibilità ed estensibilità delle applicazioni e degli endpoint che utilizzano modelli contestuali, ed è un approccio che non incoraggia l'entropia del software che fanno i modelli canonici.
Il saggio non presenta prove di alcun tipo a supporto delle sue affermazioni, ma mi ha fatto mettere in dubbio l'approccio CDM abbastanza a lungo per provare l'alternativa e il software risultante non è esploso, letteralmente o figurativamente. Ma ciò non significa molto in isolamento; Avrei potuto essere solo fortunato.
Quindi mi chiedo, sono state fatte ricerche serie sugli effetti pratici a lungo termine dell'avere un modello canonico rispetto ai modelli contestuali in un sistema software o in un'architettura?
Oppure, se è troppo presto per chiederlo, allora alcuni sviluppatori / architetti hanno scritto di esperienze personali che passano da un CDM a modelli contestuali indipendenti, o viceversa, e quali sono stati gli effetti pratici su cose come produttività, complessità o affidabilità?
Che dire delle differenze a diversi livelli, ovvero utilizzando lo stesso modello in una singola applicazione anziché utilizzarlo in un sistema di applicazioni o un'intera impresa?
(Solo fatti, per favore; le storie di guerra sono benvenute ma nessuna speculazione.)