Les preuves actuelles soutiennent-elles l'adoption de modèles contextuels plutôt que canoniques?

9

L'idée «canonique» est omniprésente dans les logiciels; des modèles comme modèle de Canonical , Canonique schéma , modèle de données Canonique et ainsi de suite, semblent venir encore et encore dans le développement.

Comme de nombreux développeurs, j'ai souvent suivi, sans réserve, la sagesse conventionnelle selon laquelle vous avez besoin d' un modèle canonique, sinon vous serez confronté à une explosion combinatoire de mappeurs et de traducteurs. Ou du moins, je l' habitude de le faire jusqu'à quelques années il y a quand je lis le peu tristement célèbre EF Vote de confiance :

Les hypothèses qui soutenaient autrefois la poursuite de modèles de données canoniques ne comprenaient pas et ne pouvaient pas inclure des facteurs qui seraient découverts une fois l'idée mise en pratique. Nous avons constaté, à travers des années d'essais et d'erreurs, que l'utilisation de modèles distincts pour chaque contexte individuel dans lequel un modèle de données canonique pourrait être utilisé est l'approche la moins complexe, l'approche la moins coûteuse et celle qui conduit à une plus grande maintenabilité et extensibilité. des applications et des points de terminaison à l'aide de modèles contextuels, et c'est une approche qui n'encourage pas l'entropie logicielle que font les modèles canoniques.

L'essai ne présente aucune preuve d'aucune sorte pour étayer ses affirmations, mais m'a fait remettre en question l'approche CDM assez longtemps pour essayer l'alternative, et le logiciel résultant n'a pas explosé, littéralement ou au figuré. Mais cela ne veut pas dire beaucoup de choses isolément; J'aurais pu avoir de la chance.

Je me demande donc si des recherches sérieuses ont été effectuées sur les effets pratiques à long terme d'un modèle canonique par rapport à des modèles contextuels dans un système logiciel ou une architecture?

Ou, s'il est trop tôt pour demander cela, faites-vous écrire des développeurs / architectes sur des expériences personnelles passant d'un MDP à des modèles contextuels indépendants, ou vice versa, et quels ont été les effets pratiques sur des choses comme la productivité, la complexité ou la fiabilité?

Qu'en est-il des différences à différents niveaux, c'est-à-dire en utilisant le même modèle sur une seule application ou en l'utilisant sur un système d'applications ou une entreprise entière?

(Faits seulement, s'il vous plaît; les histoires de guerre sont les bienvenues mais pas de spéculation.)

Aaronaught
la source
Je n'ai aucune idée de ce dont ils parlent dans l'article "Vote of No Confidence". Le reste de l'article est logique, mais la section sur le canonicalisme est si abstraite qu'elle ne veut rien dire. Cela aurait été bien s'ils avaient fourni un exemple de ce dont ils parlaient.
Robert Harvey
@Robert: Je n'ai aucune idée s'il y a du vrai mais c'est assez clair pour moi ce que cela signifie ... vous êtes sûrement familier avec les modèles CM / CDM? Dans sa plus simple incarnation, il partage un seul modèle / contexte EF monolithique (ou Linq to SQL, ou autre) sur l'ensemble de l'application au lieu de l'approche plus (perçue) de tap-tapey d'écrire des requêtes spécifiques pour des parties spécifiques de l'application. À un niveau supérieur, il adopte un schéma universel pour toute une organisation auquel toutes les applications / systèmes individuels doivent se traduire.
Aaronaught
1
Il semble que le débat EF se concentre sur la table d'abord contre la conception de première classe, car la conception de table d'abord (où les classes sont générées à partir des tables) suggère un modèle monolithique (bien qu'il y ait toujours des requêtes et des vues spécialisées), tandis que la conception de classe d'abord (où les tableaux sont générés à partir des classes) suggère un modèle OO plus flexible et plus flexible. Je suis un peu old-school, préférant l'approche table-first, mais je pouvais voir comment l'approche class-first serait attrayante pour certains.
Robert Harvey
@Robert, ce n'était pas mon intention d'évoquer le "débat EF", je viens de prendre une seule citation de cette page parce que c'est là que j'ai entendu l'argument pour la première fois (et je ne sais pas si je l'ai entendu clairement exprimé ailleurs). Séparément, je ne suis pas sûr d'être d'accord pour dire que la conception par table représente en fait un modèle monolithique; la base de données elle - même l' est, mais seul le SGBD en est vraiment conscient - les différentes parties de l'application ont tendance à ne connaître que les tables et les requêtes spécifiques dont elles dépendent.
Aaronaught

Réponses:

5

En réponse à l'article EF Vote of No Confidence , EF Mallalieu écrit:

Nous ne recommandons pas que les gens reviennent à l'époque où nous évangélisions l'utilisation de XSD pour les «schémas canoniques». Je ne crois pas que les gens pensent que cela est traitable. Ce que nous pensons cependant, c'est qu'il est souhaitable d'avoir un seul méta-modèle (EDM si vous voulez) avec lequel vous pouvez décrire de nombreux modèles de domaine et qu'en ayant une grammaire unique, nous pouvons fournir un ensemble de services communs sur n'importe quel modèle de domaine donné.

Par exemple, considérons une application qui doit être écrite sur une base de données avec 600 tables. Dois-je croire que cette application devrait avoir un seul modèle avec 600 types d'entités? Non… De plus, est-ce que je crois qu'une entité de domaine donnée (par exemple, un client) n'a qu'une seule forme dans cette application et que cette forme doit être la forme canonique pour toute l'entreprise?… Heck no.

L'article de Wikipedia pour Canonical Model fait référence à des choses comme Enterprise Service Bus , Service-Oriented Architecture et CORBA , des choses qui semblent ne plus être parlées. Ils étaient tous posés comme la solution aux défis de la prolifération des données et de la communication de l'entreprise, le One Ring to Rule Them All. TM Ont-ils réussi? Ou se sont-ils effondrés sous leur propre poids?


Vous avez demandé des expériences personnelles, je vais donc vous en donner une. Dans l'industrie aérospatiale, nous utilisons beaucoup la télémétrie. L'un des défis des systèmes de télémétrie est de trouver un moyen pour différentes plages de test de communiquer les données de test entre elles de manière significative. Ce problème semble assez simple, jusqu'à ce que vous tentiez de définir un dictionnaire de données de termes courants.

Que signifie «altitude»? Est-ce la hauteur au-dessus du sol ou la hauteur au-dessus du niveau de la mer? Et si vous parlez d'un sous-marin? Puis sa profondeur, pas l'altitude. Pour l'armée, le mot «transmission» a une signification différente lorsque vous faites référence à une antenne radar par rapport à un véhicule au sol. La surface de l'aile qui fait rouler un avion est appelée "aileron" sur certains avions et "elevon" sur d'autres.

Ce n'est qu'un indice de la montagne de problèmes qui suit. Bien qu'il existe des normes pour les communications de données, chaque plage de test est différente et a des besoins, des objectifs et des priorités différents. Les normes peuvent différer même entre différents projets sur la même gamme. Pour cette raison, les gammes de tests comprennent que la solution ne viendra pas en remplaçant tout par un seul système monolithique, mais en convenant de protocoles de communication simples et en fournissant des moyens de traduire du vocabulaire d'une gamme à l'autre.


Les problèmes auxquels sont confrontées les grandes entreprises sont similaires. Microsoft a tendance à penser en termes monolithiques, mais c'est parce que leur entreprise est, dans l'ensemble, monolithique. Dès que vous avez besoin de communiquer entre différentes entreprises avec des cultures et des façons de faire très différentes (ou même entre des départements disparates au sein d'une même entreprise), le One Ring to Rule Them All. TM commence immédiatement à se décomposer.

Robert Harvey
la source
Il est intéressant de savoir que les concepteurs de Microsoft eux-mêmes ne recommandent pas le méga-modèle partagé; malheureusement, c'est exactement la façon dont Linq to SQL et EF et de nombreux autres ORM ont tendance à être utilisés. Quoi qu'il en soit, il y a encore beaucoup de gens qui font la promotion du concept de modèle canonique et j'aimerais toujours savoir comment cela se passe dans la pratique par rapport à l'alternative.
Aaronaught le
@Aaronaught: Voir mon montage.
Robert Harvey
C'est un bon montage, et pour info, je l'ai voté. Je suis cependant déjà conscient de bon nombre des problèmes d'incongruité spécifiques qui surgissent lorsque j'essaie de canoniser un modèle; Je suis particulièrement intéressé à en savoir plus sur les expériences ou les données à long terme sur les équipes qui ont investi du temps pour résoudre ces incongruités, afin d'avoir un mappeur par point de terminaison (de bout en bout), par rapport à investir le temps dans une extrémité distincte des mappeurs de bout en bout, et quelles approches ont vraiment produit les solutions les moins coûteuses / les plus complexes.
Aaronaught
Ou pour le dire plus succinctement: je sais que la création et le maintien d'un modèle canonique demandent beaucoup de travail, ce que je veux savoir, c'est quand (si jamais) les avantages ont été observés supérieurs au coût.
Aaronaught