Unterstützt die aktuelle Evidenz die Übernahme von Contextual über Canonical Data Models?

9

Die "kanonische" Idee ist in Software allgegenwärtig; Muster wie das kanonische Modell , das kanonische Schema , das kanonische Datenmodell usw. scheinen in der Entwicklung immer wieder aufzutauchen.

Wie viele Entwickler bin ich oft unkritisch der herkömmlichen Weisheit gefolgt, dass Sie ein kanonisches Modell benötigen , da Sie sonst einer kombinatorischen Explosion von Mappern und Übersetzern ausgesetzt sind. Oder zumindest, ich verwendet , um vor , dass bis vor ein paar Jahren, wenn ich zuerst die etwas berüchtigten lesen EF Misstrauens :

Die Hypothesen, die einst die Verfolgung kanonischer Datenmodelle unterstützten, enthielten und konnten keine Faktoren enthalten, die entdeckt würden, wenn die Idee in die Praxis umgesetzt würde. Wir haben durch jahrelanges Ausprobieren festgestellt, dass die Verwendung separater Modelle für jeden einzelnen Kontext, in dem ein kanonisches Datenmodell verwendet werden könnte, der am wenigsten komplexe Ansatz ist, der kostengünstigste Ansatz ist und zu einer größeren Wartbarkeit und Erweiterbarkeit führt Dies ist ein Ansatz, der die Software-Entropie kanonischer Modelle nicht fördert.

Der Aufsatz enthält keinerlei Beweise für seine Behauptungen, hat mich jedoch dazu gebracht, den CDM-Ansatz lange genug in Frage zu stellen, um die Alternative auszuprobieren, und die resultierende Software ist weder wörtlich noch im übertragenen Sinne explodiert. Aber das bedeutet nicht viel für sich; Ich hätte einfach Glück haben können.

Ich frage mich also, ob ernsthafte Untersuchungen zu den praktischen, langfristigen Auswirkungen eines kanonischen Modells gegenüber kontextuellen Modellen in einem Softwaresystem oder einer Softwarearchitektur durchgeführt wurden.

Oder, wenn es zu früh ist, um danach zu fragen, haben Entwickler / Architekten dann über persönliche Erfahrungen beim Wechsel von einem CDM zu unabhängigen Kontextmodellen oder umgekehrt geschrieben und welche praktischen Auswirkungen dies auf Dinge wie Produktivität, Komplexität oder Zuverlässigkeit hatte?

Was ist mit den Unterschieden auf verschiedenen Ebenen, dh die Verwendung des gleichen Modells für eine einzelne Anwendung im Vergleich zur Verwendung für ein Anwendungssystem oder ein gesamtes Unternehmen?

(Nur Fakten, bitte; Kriegsgeschichten sind willkommen, aber keine Spekulationen.)

Aaronaught
quelle
Ich habe keine Ahnung, wovon sie im Artikel "Vote of No Confidence" sprechen. Der Rest des Artikels macht Sinn, aber der Abschnitt über den Kanonikalismus ist so abstrakt, dass er nichts bedeutet. Es wäre schön gewesen, wenn sie ein Beispiel dafür geliefert hätten, wovon sie sprachen.
Robert Harvey
@Robert: Ich habe keine Ahnung, ob es eine Wahrheit gibt, aber mir ist ziemlich klar, was es bedeutet ... sicherlich kennen Sie die CM / CDM-Muster? In seiner einfachsten Form teilt es ein einzelnes monolithisches EF- (oder Linq to SQL- oder was auch immer) Modell / Kontext für die gesamte Anwendung, anstatt den eher (wahrgenommenen) Ansatz, bestimmte Abfragen für bestimmte Teile der Anwendung zu schreiben. Auf einer höheren Ebene wird ein universelles Schema für eine gesamte Organisation übernommen, in das alle einzelnen Anwendungen / Systeme übersetzt werden müssen.
Aaronaught
1
Es hört sich so an, als ob sich die EF-Debatte auf Table First vs. Class First Design konzentriert, da Table First Design (bei dem die Klassen aus den Tabellen generiert werden) ein monolithisches Modell vorschlägt (obwohl es immer spezielle Abfragen und Ansichten gibt), während Class First Design (wo die Tabellen aus den Klassen generiert werden) schlägt ein flexibleres OO-Modell mit Klebeband vor. Ich bin ein bisschen altmodisch und bevorzuge den Table-First-Ansatz, aber ich konnte sehen, wie attraktiv der Class-First-Ansatz für einige sein würde.
Robert Harvey
@Robert, ich hatte nicht die Absicht, die "EF-Debatte" zur Sprache zu bringen. Ich habe nur ein einziges Zitat aus dieser Seite genommen, weil ich dort das Argument zum ersten Mal gehört habe (und ich bin mir nicht sicher, ob ich es gehört habe irgendwo anders klar ausgedrückt). Unabhängig davon bin ich mir nicht sicher, ob das Table-First-Design tatsächlich ein monolithisches Modell darstellt. Die Datenbank selbst ist sich dessen bewusst, aber nur das DBMS ist sich dessen wirklich bewusst. Verschiedene Teile der Anwendung kennen in der Regel nur die spezifischen Tabellen und Abfragen, von denen sie abhängen.
Aaronaught

Antworten:

5

Als Antwort auf den Artikel EF Vote of No Confidence schreibt Tim Mallalieu:

Wir empfehlen den Leuten nicht, zu den Tagen zurückzukehren, als wir die Verwendung von XSD für „kanonische Schemata“ evangelisierten. Ich glaube nicht, dass die Leute denken, dass dies nachvollziehbar ist. Wir glauben jedoch, dass es wünschenswert ist, ein einziges Metamodell (EDM, wenn Sie so wollen) zu haben, mit dem Sie viele Domänenmodelle beschreiben können, und dass wir mit einer einzigen Grammatik eine Reihe gemeinsamer Dienste für jedes bereitstellen können gegebenes Domain-Modell.

Stellen Sie sich beispielsweise eine Anwendung vor, die für eine Datenbank mit 600 Tabellen geschrieben werden soll. Glaube ich, dass diese App ein einzelnes Modell mit 600 Entitätstypen enthalten sollte? Nein… Glaube ich außerdem, dass eine bestimmte Domain-Entität (z. B. Kunde) in dieser App nur eine Form hat und dass diese Form die kanonische Form für das gesamte Unternehmen sein muss?… Heck-Nr.

Der Wikipedia-Artikel für Canonical Model verweist auf Dinge wie Enterprise Service Bus , Service-Oriented Architecture und CORBA , über die anscheinend kaum noch gesprochen wird. Sie alle wurden als Lösung für die Herausforderungen bei der Datenverbreitung und Kommunikation des Unternehmens, dem One Ring to Rule Them All, gestellt. TM Haben sie Erfolg gehabt? Oder sind sie unter ihrem eigenen Gewicht zusammengebrochen?


Sie haben nach persönlichen Erfahrungen gefragt, also gebe ich Ihnen eine. In der Luft- und Raumfahrtindustrie verwenden wir häufig Telemetrie. Eine der Herausforderungen bei Telemetriesystemen besteht darin, einen Weg für verschiedene Testbereiche zu finden, um Testdaten auf sinnvolle Weise miteinander zu kommunizieren. Dieses Problem scheint einfach zu sein, bis Sie versuchen, ein Datenwörterbuch mit allgemeinen Begriffen zu definieren.

Was bedeutet "Höhe"? Ist es die Höhe über dem Boden oder ist es die Höhe über dem Meeresspiegel? Was ist, wenn Sie über ein U-Boot sprechen? Dann seine Tiefe, nicht die Höhe. Für die Armee hat das Wort "Übertragung" eine andere Bedeutung, wenn Sie sich auf eine Radarschüssel beziehen als auf ein bodengestütztes Fahrzeug. Die Flügeloberfläche, die ein Flugzeug zum Rollen bringt, wird in einigen Flugzeugen als "Querruder" und in anderen als "Elevon" bezeichnet.

Das ist nur ein Hinweis auf den Berg der folgenden Probleme. Obwohl es Standards für die Datenkommunikation gibt, ist jeder Testbereich anders und hat unterschiedliche Anforderungen, Ziele und Prioritäten. Standards können sogar zwischen verschiedenen Projekten im gleichen Bereich unterschiedlich sein. Aus diesem Grund verstehen Testbereiche, dass die Lösung nicht darin besteht, alles durch ein einziges monolithisches System zu ersetzen, sondern einfache Kommunikationsprotokolle zu vereinbaren und Möglichkeiten zur Übersetzung von Vokabeln eines Bereichs in einen anderen bereitzustellen.


Die Probleme, mit denen große Unternehmen konfrontiert sind, sind ähnlich. Microsoft neigt dazu, monolithisch zu denken, aber das liegt daran, dass das Unternehmen im Großen und Ganzen monolithisch ist. Sobald Sie zwischen verschiedenen Unternehmen mit sehr unterschiedlichen Kulturen und Geschäftsmethoden (oder sogar zwischen unterschiedlichen Abteilungen im selben Unternehmen) kommunizieren müssen, ist der Eine Ring, um sie alle zu regieren. TM beginnt sofort zusammenzubrechen.

Robert Harvey
quelle
Es ist interessant zu wissen, dass die Microsoft-Designer selbst das gemeinsame Megamodell nicht empfehlen. Leider werden Linq to SQL und EF und viele andere ORMs genau so verwendet. Unabhängig davon gibt es immer noch viele Leute, die für das kanonische Modellkonzept werben, und ich würde immer noch gerne wissen, wie es in der Praxis im Vergleich zur Alternative abschneidet.
Aaronaught
@Aaronaught: Siehe meine Bearbeitung.
Robert Harvey
Es ist eine gute Bearbeitung, und zu Ihrer Information habe ich sie positiv bewertet. Mir sind jedoch bereits viele der spezifischen Inkongruenzprobleme bekannt, die auftreten, wenn versucht wird, ein Modell zu kanonisieren. Ich bin besonders daran interessiert, etwas über Erfahrungen oder Langzeitdaten von Teams zu erfahren, die die Zeit investiert haben, um diese Inkongruenzen zu beheben, um einen Mapper pro Endpunkt (End-to-Model) zu haben, anstatt die Zeit in ein separates Ende zu investieren -zu-zu-Ende-Mapper, und welche Ansätze tatsächlich die kostengünstigsten / komplexesten Lösungen ergaben.
Aaronaught
Oder um es kurz zu machen: Ich weiß, dass es eine Menge Arbeit ist, ein kanonisches Modell zu erstellen und zu pflegen. Ich möchte wissen, wann (wenn überhaupt) festgestellt wurde, dass die Vorteile die Kosten überwiegen.
Aaronaught