Ich habe gerade einen neuen Job als Datenbankentwickler für ein mittelständisches Unternehmen begonnen, das auf Microsoft-Technologie basiert. Ich habe schon früh gemerkt, wie sehr die Praktiken in Bezug auf bewährte Praktiken, Entwurfsmuster, Tests und Projektmanagement von den in der Schule gelehrten Praktiken abweichen.
Was mich am meisten stört, ist, wie unser Hauptdatenbankentwickler (im Folgenden "John" genannt) das Modellschema in der Datenbank hält! Wir tun dies, indem wir 3 "magische" Tische haben; eines für Datenbankschemata, eines für Tabellen und eines für Spalten.
Das Einfügen eines Datensatzes in die " Tables " -Tabelle erzeugt (über einen Datenbank-Trigger) die aktuelle, entsprechende Tabelle. Durch das Einfügen einer Zeile in die " Zeilen " -Tabelle wird die referenzierte Tabelle mit dieser Zeile aktualisiert. Diese werden wiederum von seinem hausgemachten C # -Programm gelesen, um C # -Modelle zu generieren, die von den Frontend-Entwicklern für Controller und nach außen verwendet werden.
Abgesehen davon erfolgt der größte Teil der Entwicklung gemäß dem ASP.NET MVC- Framework.
Ich sehe ein paar Mängel bei diesem Ansatz:
- Wir brauchen ihn, um den ORM aufrechtzuerhalten, und er hat selten die Zeit dazu (Arbeitsplatzsicherheit ist gut!)
- Die Auslöser für die Tabellen "Tables" und "Rows" sind fehlerhaft. Sie unterstützen keine Tabellenaktualisierungen, Check-Constraints oder "erweiterte" Funktionen. Obwohl wir sie sicherlich verbessern könnten, bin ich mir noch nicht sicher, ob dies der richtige Weg ist.
- Das Behalten der Programmlogik in der Datenbank fühlt sich seltsam und einschränkend an (obwohl es möglich ist, seine Modelle durch C # zu erweitern).
- Sein C # -Modellgenerator muss manuell von einer von drei Personen (unter denen ich eine bin) ausgeführt werden und ist noch nicht ausgereift genug, um in einen automatisierten Erstellungsprozess einbezogen zu werden.
Einige Leute haben vorgeschlagen, ein echtes und getestetes Produkt wie Entity Framework einzuführen, aber er lehnt es ab, da die Geschäftslogik nur für kleine Anwendungen und Bootstrap-Projekte für Startups geeignet ist.
Dieser Beitrag führt zu etwas, das wie eine Diskussion mit einer Meinung aussieht, aber das ist nicht meine Absicht. Ich möchte nur etwas Klarheit über unseren architektonischen Ansatz.
Kann die Speicherung der Domain-Modelle in der Datenbank eine nachhaltige Lösung für ein wachsendes Unternehmen sein?
quelle
Antworten:
Sie beschreiben eine innere Plattform.
Das Problem mit inneren Plattformen besteht darin, dass Sie alle Mechanismen einer Plattform oder Technologie (in diesem Fall eine relationale Datenbank) neu erfinden, die über Jahrzehnte von Evolution und Anstrengung hinweg verfeinert und perfektioniert wurden, aber nur unzureichend neu erfinden. Sie umgehen alle Optimierungen, die für diejenigen verfügbar sind, die sich für ein konventionelleres Design entscheiden, und tauschen anfängliche Einfachheit und Eleganz gegen zukünftige Komplexität und Härte aus.
Das heißt, wenn das Endprodukt dieses Prozesses echte Tabellen und echte Klassen sind, die echte Geschäftsdomänenobjekte modellieren , sehe ich abgesehen von der Unreife der Tools keinen großen Schaden in diesem Ansatz. Stack Exchange verwendet tatsächlich ihren eigenen, selbst entwickelten ORM, und das scheint für sie geklappt zu haben. Ich weiß also, dass solche "Häuschen" -Ansätze funktionieren können.
Beachten Sie, dass die meisten ORMs, die den "table-first" -Ansatz verwenden, einfach die Tabellenstruktur in der Datenbank betrachten, um die Klassen zu erstellen. Die Tabellen "table" und "row", die Ihr Freund erstellt hat, sind lediglich Metadaten, die bereits in den Systemtabellen der meisten modernen relationalen Datenbanksysteme vorhanden sind.
Weiterführende Literatur
Das "Vision" -Projekt, eine warnende Geschichte über den Effekt der inneren Plattform
(Sie können die Präambel überspringen und unter der Überschrift "Introducing Vision" mit dem Lesen beginnen)
quelle