A idéia "canônica" é difundida em software; padrões como Modelo Canônico , Esquema Canônico , Modelo de Dados Canônico e assim por diante, parecem surgir repetidamente em desenvolvimento.
Como muitos desenvolvedores, muitas vezes segui, sem crítica, a sabedoria convencional de que você precisa de um modelo canônico; caso contrário, você enfrentará uma explosão combinatória de mapeadores e tradutores. Ou pelo menos, eu costumava fazer isso até um par de anos atrás, quando li pela primeira vez a um pouco infame EF voto de confiança :
As hipóteses que antes apoiavam a busca de modelos de dados canônicos não incluíam nem poderiam incluir fatores que seriam descobertos quando a idéia fosse posta em prática. Descobrimos, através de anos de tentativa e erro, que o uso de modelos separados para cada contexto individual em que um modelo de dados canônicos pode ser usado é a abordagem menos complexa, é a abordagem menos onerosa e a que leva a maior capacidade de manutenção e extensibilidade dos aplicativos e pontos de extremidade usando modelos contextuais, e é uma abordagem que não incentiva a entropia de software que os modelos canônicos fazem.
O ensaio não apresenta nenhuma evidência de qualquer tipo para apoiar suas afirmações, mas me fez questionar a abordagem do MDL por tempo suficiente para tentar a alternativa, e o software resultante não explodiu, literal ou figurativamente. Mas isso não significa muito isolado; Eu poderia ter tido sorte.
Então, eu estou me perguntando, alguma pesquisa séria foi feita sobre os efeitos práticos e de longo prazo de ter um modelo canônico versus modelos contextuais em um sistema ou arquitetura de software?
Ou, se for muito cedo para perguntar isso, algum desenvolvedor / arquiteto escreveu sobre experiências pessoais mudando de um CDM para modelos contextuais independentes, ou vice-versa, e quais foram os efeitos práticos em coisas como produtividade, complexidade ou confiabilidade?
E as diferenças em diferentes níveis, ou seja, usar o mesmo modelo em um único aplicativo vs. usá-lo em um sistema de aplicativos ou em uma empresa inteira?
(Apenas fatos, por favor; histórias de guerra são bem-vindas, mas não há especulação.)