Ist es besser, Modellklassen zu erstellen oder bei der generischen Datenbank-Dienstprogrammklasse zu bleiben?

StackOverflow https://stackoverflow.com/questions/2778

Frage

Wir haben intern eine einfache Dienstprogrammklasse für unsere Datenbankaufrufe (ein leichter Wrapper um ADO.NET), aber ich denke darüber nach, Klassen für jede Datenbank/jedes Objekt zu erstellen.Wäre es klug, dies zu tun, oder würde es nur dann von Vorteil sein, wenn wir das vollständige MVC-Framework für ASP.NET verwenden würden?

Wir haben also Folgendes:

SQLWrapper.GetRecordset(connstr-alias, sql-statement, parameters);
SQLWrapper.GetDataset(connstr-alias, sql-statement, parameters);
SQLWrapper.Execute(connstr-alias, sql-statement, parameters);

Ich denke darüber nach:

Person p = Person.get(id);
p.fname = "jon";
p.lname = "smith";
p.Save();

oder für einen neuen Rekord -

Person p = new Person();
p.fname = "Jon";
p.lname = "Smith";
p.Save();
p.Delete();

Wäre das klug oder wäre es übertrieben?Ich sehe den Vorteil für die Wiederverwendung, die Änderung der Datenbank und die Wartung/Lesbarkeit.

War es hilfreich?

Lösung

Diese Frage ist geladen, datengesteuertes Design vs. domänengesteuertes Design.Für jede Anwendung mit gutem Verhalten sollte domänengesteuertes Design bevorzugt werden.Berichterstellungs- oder Hilfsanwendungen funktionieren mit datengesteuertem Design tendenziell besser (oder lassen sich schneller entwickeln).

Sie fragen sich: „Sollte mein Unternehmen die Art und Weise, wie wir unseren Code entwerfen, grundlegend ändern?“Als Domain-Freak schreie ich aus dem Bauch heraus Ja.Aufgrund der Einfachheit Ihrer Frage bin ich mir jedoch nicht sicher, ob Sie den Umfang der von Ihnen vorgeschlagenen Änderung vollständig verstehen.Ich denke, Sie sollten mehr mit Ihrem Team darüber sprechen.

Besorgen Sie sich Literatur, z Evans DDD Buch, oder das Kostenloses E-Book „Grundlagen“., Dann können Sie besser beurteilen, in welche Richtung Sie gehen sollten.

Andere Tipps

MVC ist keineswegs das einzige Designmuster für das Web, aber es ist ein nützliches.

Meiner Meinung nach wird es sich auszahlen, nur das „M“ zu übernehmen, auch wenn Sie das „V“ oder „C“ nicht übernehmen können/wollen.

Der von Ihnen besprochene Ansatz wird von vielen Leuten als gut angesehen, auch von mir!Das Erlernen dieses Ansatzes erfordert einige Anstrengung, aber lassen Sie sich davon nicht abschrecken!

Wie wäre es, wenn Sie es einfach mit einem versuchen würden? kleines Projekt mit LINQ to SQL?Vielleicht finden Sie eine schönes Referenzprojekt An Google-Code, und studieren Sie, wie andere damit gearbeitet haben.

Es handelt sich um ein einfaches Tool, mit dem Sie sich mit einigen Problemen vertraut machen können, die bei der Zuordnung von Objekten zu Datenbanken auftreten.

Dann wird es Ihnen gelingen ein Gefühl dafür bekommen, und entscheiden Sie, ob sich die Lernkurve lohnt.

Es wird neue Konzepte zu begreifen geben und experimentieren Sie mit Dingen wie:

  • Arbeitseinheit:Wenn Sie „Speichern“ und „Löschen“ usw. ausführen, führt ein ORM dies in der Regel nicht sofort aus, während dies bei einem Recordset-basierten DAL der Fall ist.Das kann überraschend sein, daher müssen Sie etwas darüber lernen.Informieren Sie sich darüber Muster der Arbeitseinheit um ein Verständnis dafür zu bekommen.
  • Massenoperationen sind ein Problem mit OR/M.Ein Datenleser kann Tausende von Zeilen effizient durchlaufen, bei einem ORM müssen Sie jedoch vorsichtig sein, wenn Sie mit großen Objektmengen arbeiten.Wieder einmal etwas zum Nachlesen.
  • Verbände Scheint großartig zu sein, wenn man so etwas tun kann customer.Orders.Count Sie sind aber auch die Ursache vieler Probleme.Sie müssen einige sichere Vorgehensweisen finden, die Sie bei der Arbeit mit Verbänden befolgen können.

...um ein paar zu nennen.

Machen Sie sich für den Anfang keine Gedanken über Vererbung und so weiter, fangen Sie einfach einfach an und verfügen Sie über einfache Entitäten, die Tabellen zugeordnet werden können.

Versuchen Sie, sie auf die gleiche Weise zu verwenden, wie Sie Ihr vorhandenes DAL verwenden würden.Dann beginnen Sie mit Assoziationen zu experimentieren.

Versuchen Sie dann vielleicht, Ihren Entitäten mehr Verhalten zu verleihen.Wenn Ihnen das gefällt und Sie das Gefühl haben, dass Sie mehr Funktionen benötigen, sollten Sie einen ORM mit mehr Funktionen ausprobieren Lichtgeschwindigkeit oder NHibernate.

Hoffe das hilft!

Für mich sieht es so aus, als würden Sie versuchen, das zu tun, was LINQ bereits für Sie tun kann.Wenn Sie in einem älteren Framework stecken bleiben, in dem Sie das nicht verwenden können, empfehle ich Ihnen möglicherweise die Verwendung von Subconic (http://subsonicproject.com/), anstatt alle diese Modellobjekte manuell erstellen zu müssen.

Ich hatte ein Projekt, bei dem ich mich in einer ähnlichen Situation befand, und bin nach der Hälfte der Projektlaufzeit auf Subsonic umgestiegen, mit fantastischen Ergebnissen.Schnellere Entwicklung und VIEL einfacher zu lesender/verwendender Code.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top