As evidências atuais apóiam a adoção de modelos de dados contextuais sobre modelos canônicos?

9

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.)

Aaronaught
fonte
Não faço ideia do que eles estão falando no artigo "Voto de nenhuma confiança". O restante do artigo faz sentido, mas a seção sobre canonicalismo é tão abstrata que não significa nada. Seria bom se eles tivessem dado um exemplo do que estavam falando.
Robert Harvey
@ Robert: Eu não tenho idéia se existe alguma verdade, mas é bem claro para mim o que isso significa ... certamente você está familiarizado com os padrões de CM / CDM? Em sua encarnação mais simples, ele compartilha um único modelo / contexto EF (ou Linq to SQL, ou qualquer outro) EF monolítico em todo o aplicativo, em vez da abordagem mais percebida de escrever consultas específicas para partes específicas do aplicativo. Em um nível superior, está adotando um esquema universal para uma organização inteira para a qual todos os aplicativos / sistemas individuais devem se traduzir.
precisa saber é o seguinte
11
Parece que o debate da EF se concentra no design da primeira tabela versus primeiro da classe, pois o design da primeira tabela (onde as classes são geradas a partir das tabelas) sugere um modelo monolítico (embora sempre haja consultas e visualizações especializadas), enquanto o design da primeira classe (onde as tabelas são geradas a partir das classes) sugere um modelo OO mais flexível e flexível. Eu sou um pouco antiquado, preferindo a abordagem da primeira tabela, mas pude ver como a abordagem da primeira classe seria atraente para alguns.
Robert Harvey
@Robert, não era minha intenção trazer o "debate da EF", tirei uma única citação dessa página porque foi onde ouvi o argumento pela primeira vez (e não tenho certeza se o ouvi) claramente expresso em qualquer outro lugar). Separadamente, não tenho certeza se concordo que o design da tabela em primeiro lugar represente um modelo monolítico; o próprio banco de dados é, mas apenas o DBMS está realmente ciente disso - partes diferentes do aplicativo tendem a estar cientes apenas das tabelas e consultas específicas das quais eles dependem.
precisa saber é o seguinte

Respostas:

5

Em resposta ao artigo EF Vote of No Confidence , Tim Mallalieu escreve:

Não estamos recomendando que as pessoas voltem aos dias em que estávamos evangelizando o uso de XSD para "esquemas canônicos". Não acredito que as pessoas pensem que isso é tratável. No entanto, acreditamos que é desejável ter um único metamodelo (EDM, se desejar) com o qual você pode descrever muitos modelos de domínio e que, com uma gramática única, podemos fornecer um conjunto de serviços comuns em qualquer determinado modelo de domínio.

Por exemplo, considere um aplicativo que deve ser gravado em um banco de dados com 600 tabelas. Eu acredito que este aplicativo deve ter um modelo único com 600 tipos de entidade? Não ... Além disso, acredito que qualquer entidade de domínio (digamos, Cliente) tem apenas uma forma nesse aplicativo e que essa forma deve ser a forma canônica para toda a empresa? ... Caramba, não.

O artigo da Wikipedia para Canonical Model faz referência a coisas como Enterprise Service Bus , Service-Oriented Architecture e CORBA , coisas que parecem dificilmente serem discutidas. Todos foram colocados como a solução para os desafios de proliferação e comunicação de dados da empresa, o único anel para governar todos eles. TM eles conseguiram? Ou eles entraram em colapso com seu próprio peso?


Você pediu experiências pessoais, então eu lhe darei uma. Na indústria aeroespacial, usamos muito a telemetria. Um dos desafios dos sistemas de telemetria é encontrar uma maneira de diferentes faixas de teste comunicarem dados de teste de maneira significativa. Esse problema parece bastante simples, até você tentar definir um dicionário de dados com termos comuns.

O que significa "altitude"? É a altura acima do solo ou é a altura acima do nível do mar? E se você estiver falando de um submarino? Então sua profundidade, não altitude. Para o Exército, a palavra "transmissão" tem um significado diferente quando você está se referindo a uma antena parabólica do que a um veículo terrestre. A superfície da asa que faz a aeronave rolar é chamada de "aileron" em alguns aviões e de "onze" em outros.

Essa é apenas uma dica da montanha de problemas que se seguem. Embora existam padrões para a comunicação de dados, cada faixa de teste é diferente e possui diferentes necessidades, objetivos e prioridades. Os padrões podem diferir mesmo entre projetos diferentes no mesmo intervalo. Por esse motivo, os intervalos de teste entendem que a solução não virá substituindo tudo por um único sistema monolítico, mas concordando com protocolos de comunicação simples e fornecendo maneiras de traduzir o vocabulário de um intervalo para outro.


Os problemas que as grandes empresas enfrentam são semelhantes. A Microsoft tende a pensar em termos monolíticos, mas isso ocorre porque sua empresa é, em geral, monolítica. Assim que você precisar se comunicar entre empresas diferentes, com culturas e maneiras muito diferentes de fazer negócios (ou mesmo entre departamentos diferentes na mesma empresa), o único anel para governar todos eles. A TM imediatamente começa a quebrar.

Robert Harvey
fonte
É interessante saber que os próprios designers da Microsoft não recomendam o mega-modelo compartilhado; infelizmente, é exatamente assim que o Linq to SQL e EF e muitos outros ORMs tendem a ser usados. Independentemente disso, ainda há muita gente por aí promovendo o conceito de Modelo Canônico e eu ainda gostaria de saber como ele se sai na prática versus a alternativa.
precisa saber é o seguinte
@Aaronaught: Veja minha edição.
Robert Harvey
É uma boa edição e, para sua informação, eu votei positivamente. No entanto, já estou ciente de muitos dos problemas específicos de incongruência que surgem ao tentar canonizar um modelo; Estou particularmente interessado em aprender sobre experiências ou dados de longo prazo sobre equipes que investiram tempo para resolver essas incongruências, de modo a ter um mapeador por ponto de extremidade (fim do modelo) versus investir o tempo em pontos separados. mapeadores de ponta a ponta, e quais abordagens realmente produziram as soluções de menor custo / menor complexidade.
precisa saber é o seguinte
Ou, de maneira mais sucinta: eu sei que é muito trabalhoso criar e manter um modelo canônico, o que eu quero saber é quando (se houver) os benefícios observados superam o custo.
Aaronaught