Warum ist die MS Data Access-Story so zerbrochen? Ist es die Natur des Datenzugriffs oder ist es nur MS?

11

In dieser StackOverflow-Frage wird gefragt, wo ich Microsoft.Data.Objects erhalten kann.

Es stellte sich heraus, dass die Antwort wahrscheinlich war, dass es in der CTP4-Version (Code First) von Entity Framework 4 enthalten ist. Es gab jedoch viele Vermutungen. Einschließlich

  • Systemdaten
  • Entity Framework
  • Microsoft.ApplicationBlocks.Data
  • Microsoft.Practices.EnterpriseLibrary.Data

Wenn jemand vor 10 Jahren eine ähnliche Frage gestellt hätte, hätte er möglicherweise DAO, RDO, ADO erhalten.

Ist das nur die Natur des Tieres oder ist es MS?

Tritt dieses Muster bei anderen Anbietern auf? Wo wird die Basisdatenzugriffsstrategie entweder verpackt oder geändert?

Conrad Frix
quelle

Antworten:

11

Es ist eine Kombination aus historischen / evolutionären und Marktkräften

Als ich vor einigen Jahren bei Microsoft arbeitete, war klar, dass sich in der Entwicklung verschiedene Datenangebote befanden. Jedes der Angebote war auf einen bestimmten Markt oder Anwendungsfall ausgerichtet, z.

  1. Der Zugriff richtete sich an Desktop-Benutzer, die mit Kartenindizierungssystemen vertraut sind und mithilfe der Formulare und Berichte Anwendungen erstellen können. SQL war eine natürliche Ergänzung. Dies alles verwendete seine 'eigene Datenbankmaschine für lokale Maschinen mit dem Namen' JET '. Schließlich wurde JET den Rand gedrängt - das Wort auf der Weinrebe war , dass Mangel an (zuverlässig) Quellcodeverwaltung bedeutete , dass sie hatte verloren einen großen Teil der Quelle.

  2. FoxPro richtete sich an Desktop-Benutzer, die Geschwindigkeit gegenüber relationalen Daten wünschen.

  3. SQL Server war das unternehmens- / serverseitige 'große' Datenbanksystem mit der gesamten Skalierung / Leistung / Verfügbarkeit usw., die Unternehmen benötigen. IIRC, MS hat eine Version von Sybase 6 lizenziert, auf der MSSQL erstellt werden kann.

Im Laufe der Zeit sind einige Grenzen verschwommen - z. B. kann SQL Server jetzt auf einem Desktop-Computer ausgeführt werden, der Anwendungsfall blieb jedoch bestehen.

Das gibt uns also 3 "Backends" - Datenbankprodukte von Microsoft.

Um den Mix zu erweitern, wurden verschiedene Ebenen der Entwickler-API bereitgestellt, um Zugriff auf diese Systeme zu erhalten:

  1. Anfangs gab es nicht viel APIs - Sie haben Ihren Code in die Anwendung geschrieben (FoxPro / Access). VBA war eine Methode.

  2. Microsoft hat MS ODBC implementiert, um eine Verbindung zu konkurrierenden Systemen herzustellen, damit Windows mit großen Datenbanken wie Oracle, Sybase usw. kommunizieren kann. Excel war eine der bemerkenswerten Apps, um ODBC-Tools zu erhalten - Daten aus Ihrer großen Datenbank abrufen, bearbeiten und Produktdiagramme erstellen / graphs usw. Viele Datenbankanbieter implementierten schließlich ODBC, um unterschiedlichen Clients die Verbindung zu ermöglichen. Daher war diese Strategie bis zu einem gewissen Grad erfolgreich. ODBC könnte als der kleinste gemeinsame Nenner angesehen werden.

  3. Verschiedene Teams begannen, ihre eigenen Methoden für den Zugriff auf ein Datenbankmodul wie DAO (Data Access Objects) für lokale und RDO (Remote Data Objects) für Remote zu entwickeln, auf das über VB zugegriffen werden konnte, das zu dieser Zeit das beliebteste MS-Entwicklerprodukt war.

  4. Ein interner Versuch, diese verschiedenen APIs zu rationalisieren und eine einzige / einheitliche, hochflexible Datenbankzugriffs-API bereitzustellen, gab uns OLEDB, aber es war sehr, sehr schwierig, darauf zuzugreifen (viele C ++ - Vorlagen).

  5. OLEDB konnte nicht von VB aus verwendet werden, daher wurde ADO unter Verwendung von ActiveX-Techniken entwickelt, sodass es für alles, was COM / OLE / ActiveX kann, wiederverwendbar wurde, was bedeutet, dass Access, Excel, VB und damit ASP datenbankfähig wurden.

  6. Als wir in die .NET-Ära eintraten, wurde ADO natürlich in eine .NET-Umgebung versetzt, die verschiedene Vorteile brachte.

  7. Mit dem Aufkommen von LINQ wurde der eigentliche Datenbankzugriffsmechanismus weniger ein Problem.


Vorbehalt - Ich bin jetzt vor einiger Zeit gegangen, daher ist mein Gedächtnis etwas verschwommen

JBRWilkinson
quelle
+1 Schöne Erklärung des DAO-, RDO-, ADO-Teils, aber die Frage bleibt, warum sich das Muster wiederholt hat.
Conrad Frix
Ich habe immer gedacht, dass es verschiedene MS-Abteilungen sind, die ihre eigenen (NIH) Technologien entwickeln. Es gibt sicherlich eine große Anzahl von ihnen - und Sie haben LINQ2SQL vergessen, da es durch EF ersetzt wurde!
Gbjbaanb
5

Um fair zu sein, alle von Ihnen erwähnten basieren auf ADO.NET. Zuvor war ADO für eine Weile die bevorzugte Route, aber DAO blieb nur ein bisschen hängen, weil es für Microsoft Access-Datenbanken nativ war. RDO war bei der Ankunft tot, soweit ich das beurteilen kann.

Bei all den verschiedenen Frameworks, die Sie erwähnen, besteht das Problem meiner Meinung nach darin, dass sie versuchen, eine Lösung für alle zu finden und mit jeder anderen Plattform zu konkurrieren. Wenn Sie auf einfache Weise nur SQL in Ihrem Code verwenden möchten, wählen Sie System.Data. Wenn Sie ein ORM mit Entity Framework möchten. Verwenden Sie für etwas dazwischen dann Enterprise Library Data. Jeder will etwas anderes.

Es gibt auch das Problem, dass MS ein sehr großes Unternehmen mit unterschiedlichen Teams mit unterschiedlichen Agenden ist. Zum Beispiel, warum haben sie auch 3 Textverarbeitungsprogramme (die ich kenne).

Craig
quelle
Dies. Es gibt niemanden, der zu jedem passt, also versuchen sie, alle Optionen offen zu halten.
Stijn
2

Persönlich denke ich, dass dies eher auf den Einfluss des Marketings innerhalb von Microsoft zurückzuführen ist. Mit allen Rechten könnten die meisten dieser Technologien leicht nur als Versions-Upgrades der älteren Versionen veröffentlicht werden, aber es scheint ein großer Bedarf zu bestehen, dieses Image der ständigen Neuerfindung selbst von etwas so Grundlegendem wie einer Datenzugriffsschicht zu verwirklichen.

JohnFx
quelle
4
Feuer und Bewegung
Mason Wheeler
0

Das liegt in der Natur der IT! Dinge ändern sich! In der Java-Welt hatten sie dasselbe ... JDBC, EJB 1.0, EJB 2.0, Hibernate, EJB 3.0 und so weiter.

LeWoody
quelle
1
Ich bin kein Java-Experte, aber Hibernate ist nicht von Sun, daher ist es nicht der Vergleich, den ich gesucht habe. Bei EJB scheint es mehr um SOA als um Datenzugriff zu gehen, der eher ein Software-Stack ist. Software-Stacks bekomme ich. Mehrere verschiedene Möglichkeiten, dasselbe ohne Integration zu tun, scheinen zu sehen, wie Sticks vorgehen.
Conrad Frix