2009-05-19 10 views
10

Ich weiß, dass es ein Thema ist, das viele Diskussionen auslösen kann, aber ich würde gerne wissen, was die Leute für die verschiedenen Vor- und Nachteile der Verwendung von Objektdatenquellen halten. Ich mache gerade ein Projekt mit einem anderen Programmierer, dessen Erfahrung und Komfortlevel alle im klassischen ASP verwurzelt sind, und ich bin nicht sicher, welcher Weg zu
geht. A) Erledige den Job schnell b) Erledige den Job mit einem Minimum an AufwandObject Datenquelle oder Code-Behind: Was ist besser?

Wir haben eine schöne Repository-Schicht mit Domain-Objekten in der Lage, sich selbst zu validieren, so dass die Methoden vorhanden sind, entweder die ODS-Bindung oder Code-Behind-Bindung zu tun.

Ich mag die ODS aus den meisten offensichtlichen Gründen nicht, aber wenn es mich davor rettet, Scrollen/Sortieren/Auswählen/Einfügen/Aktualisieren/Löschen von Szenarien manuell zu programmieren, kann es dann wirklich so schlimm sein?

Antwort

10

Objektdatenquellen eignen sich für kleine Projekte, sie skalieren jedoch nicht gut, da Sie Datenschichtinformationen in die UI-Ebene Ihrer Anwendung einbetten. Ich würde vorschlagen, dass Sie sie nur für sehr kleine Anwendungen und Scratch-Pad-Tests verwenden. Wenn Sie eine Designentscheidung treffen, um sie zu verwenden, bereiten Sie sich darauf vor, in Zukunft Probleme mit der Skalierung und Wartung zu haben.

0

Persönlich denke ich, dass es vom Projekt abhängt. Wenn es sich um eine kleine CRUD-Anwendung mit ein paar Seiten handelt, wird die Bindung an eine Objektdatenquelle wahrscheinlich schnell und einfach sein und wenig Konsequenzen haben.

Wenn es sich um eine groß angelegte Anwendung mit maßgeschneiderten Anforderungen handelt, kann es frustrierend sein, wenn Sie versuchen, eine Objektdatenquelle auf diese spezifischen Anforderungen abzustimmen.

+0

Es ist die Art von Anwendung, für die das Dynamic Data-Framework erstellt wurde. Leider verwenden wir nur 2.0. Es ist frustrierend, das Repository zu schreiben und die DOs zu kodieren, da man weiß, dass die Rettung nur ein Klick in einem Drop-Down (bis zu 3.5) entfernt ist! –

3

Je vertrauter Sie mit dem zugrunde liegenden ADO.NET-Framework werden, desto weniger werden Sie sich auf die Datenquellensteuerelemente verlassen, die in Visual Studio enthalten sind. Ich habe sie bei den ersten .NET-Projekten, an denen ich arbeitete, religiös verwendet, aber ich fand schnell heraus, dass es viel besser wäre, die Grundlagen des Verbindens und Abrufens von Daten in einer Datenbank zu verwenden bester Versuch, es für mich zu tun.

Ich betrachte sie mehr oder weniger als Trainingsräder, um Sie mit dem Lebenszyklus der Datenbindung mehr oder weniger vertraut zu machen.

+0

Ich hatte die selbe Erfahrung selbst mit ihnen, aber dang, wenn sie die einfachen Fälle nicht so einfach machen! Versuchung ist eine harte Herrin –

+0

Josh E: Das hängt von deiner Gesamtgeschwindigkeit ab, denke ich. Ich habe jetzt den Punkt erreicht, an dem die Erstellung einer Datenquellensteuerung länger dauert, als nur den ado.net-Code für die gleiche Sache zu knacken. Oder noch besser, nutzen Sie Ihr Wissen von ado.net, um Ihre eigene Datenzugriffsebene einzurichten, die Sie in Ihren verschiedenen Apps wiederverwenden können. Zeitersparnis auch erheblich. – TheTXI

+1

Nun, ich spreche nur über die Objekt-Datenquelle, so habe ich bereits eine DAL mit dem Repos-Muster implementiert.Ich höre Sie, wenn es um den SQL-DS geht, aber das ist hier nicht der Fall - der DA-Code ist ordnungsgemäß aus der Sicht versteckt und bereits implementiert :) –

0

Meiner Meinung nach haben beide ihren Platz, ihre Stärken und Schwächen. Die Zeitersparnis beim Kodieren der Elemente, die Sie erwähnen, besonders beim Paging und Sortieren, ist eine große Hilfe, aber wenn Sie etwas Entferntes interessantes mit ihnen machen wollen, werden sie schnell zu Problemen.

Ich verwende ODS, wenn die Daten ausschließlich für die Anzeige verwendet werden. Schlag in ein Datengitter, ein ODS, und du bist fertig. Aber wenn diese Daten irgendwie manipuliert werden müssen, bleibe ich weit weg von all den eingebauten Stücken, keine Gitter, keine ODS.

0

Ich denke, im Allgemeinen ist Code hinter nützlicher, da es eine zentrale Stelle für die Anpassung von Datenschichtverbindungen bietet. Solange Sie die Aktion in verschiedene Ebenen unterteilen, kann Code dahinter sehr skalierbar sein.

Benutzerdefinierte Objektdatenquellen hingegen sind sehr nützlich, da sie eine inhärente Bindung mit dem GridView-Steuerelement ermöglichen. Das von der benutzerdefinierten Objektdatenquelle bereitgestellte Dataset ermöglicht einfaches Sortieren und Paging. Das benutzerdefinierte Objekt bietet auch eine zentrale Position für den Datenschichtzugriff.

+0

Das ist einer der größten Nachteile bei der Verwendung deklarativer Datenbindung wie ein ODS - es platziert Logik in der Präsentation sollte das wohl nicht sein. Ich hasse es einfach Dinge zu programmieren, die ich nicht muss, und ich kämpfe immer mit Datenbindung in Webformularen und Datenquellensteuerelementen –

+1

Ich spreche über benutzerdefinierte Objektdatenquelle, nicht VS ODS. Benutzerdefiniertes ODS platziert Logik in einer anderen Klassendatei und daher können mehrere Präsentationsobjekte an dieses ODS gebunden werden. – johnofcross

7

Der größte Vorteil von DataSourceControls besteht darin, dass sie mehrere Bedenken bezüglich des .NET-Lebenszyklus abstrahieren und gleichzeitig vollständige CRUD- und bidirektionale Databinding-Ausdrücke bereitstellen, d. H.<% # Binden ("FirstName")%> (aber 2-Wege-Datenbindungen funktionieren irgendwie, so dass Sie wahrscheinlich nichts verpassen). Als Designmuster ist es eine ziemlich gute Idee mit einer mittelmäßigen Implementierung (ähnlich wie WebForms selbst).

Wenn Sie viewstate deaktivieren und herausfinden, warum Ihre Postbacks nicht bearbeitet werden oder Sie DataBind() an mehreren Stellen aufrufen müssen, können Datenquellen einige der Kopfschmerzen beseitigen, da die DataBoundControls sind intelligent genug, um zu wissen, wann sie Daten benötigen und sie nur von der Datenquelle fordern. Keine DataBind() Aufrufe notwendig.

DataSources bietet auch eine gute Möglichkeit zum Sortieren, Filtern und Paginieren. Die meisten Entwickler verwenden Code-Behind nicht in der Regel Seitenumbruch und stattdessen riesige Ergebnismengen aus der Datenbank.

Der Nachteil von Datenquellen ist, dass es nicht viele gute Implementierungen gab. Und normalerweise binden Sie Ihre Web-Benutzerschnittstelle an Ihre Persistenzimplementierung (zB SqlDataSource, LinqDataSource, etc.) oder Sie verwenden ObjectDataSource, was bedeutet, dass Sie Klassennamen und Methodennamen in Ihrem ASPX fest codieren müssen und verwendet die Reflexion etwas ineffizient. Aus diesem Grund ist es nicht nützlich für Personen, die Abhängigkeitsinjektion oder statische DAO-Klassen verwenden. Es ist eine ziemlich schlecht konzipierte Klasse und scheint fast wie ein nachträglicher Einfall von MS zu sein.

Persönlich würde ich lieber DataSources und den Code-Behind verwenden. Verwenden Sie eine DataSource, um den Lifecycle-/Viewstate-Kopfschmerz zu entfernen, und versehen Sie sie dann mit einem "Select" -Ereignis/Delegate im CodeBehind. Leider kann ObjectDataSource nur Reflektionen verwenden, Sie können jedoch leicht Ihre eigene Implementierung schreiben. Ich habe einen eigenen, aber nicht öffentlich. Doch bevor ich es geschrieben habe habe ich das, was für einige von Object die Unzulänglichkeiten up macht:

http://mikeoff.blogspot.com/2006/06/objectdatasource-working-alternative.html

+0

Danke für die Einblicke in ObjectDataSource! – Marcel

+0

gut gesagt Winston. Momentan erstelle ich einige Seiten in einer Mammut-Webformular-Anwendung neu, die ObjectDataSources verwendet. Zu diesem Zeitpunkt kann ich die Anwendung in MVC nicht neu erstellen. Daher versuche ich, einige Spaghetti-Codes in der Welt von Webforms mit konstanten Bereichsänderungen und längeren Laufzeitfehlern, die Schichten von Bandagen enthalten, zu bereinigen. Wackelige Grundlage. – JoshYates1980

0

Object wie jedes andere xxxDatasource in WebForms ist der Koordinator zwischen Business Layer auf große Anwendungen (oder die Data Access Layer auf kleineren) und die Kontrollen selbst.

Es bietet nur Daten und andere Funktionen für den visuellen Teil Ihrer Anwendung, die Benutzeroberfläche durch Ihre Ansichten in Ihrem Datenspeicher.

Benutzer sollten diese Steuerelemente als Anfragen und Antworten für UI-Elemente sehen und aufhören, sie zu missbrauchen oder sie komplett zu verwerfen. Sie sind nicht die DAL, sie sind nicht böse, sie sind nur Verbindungen zu deinen Datenquellen, die kontrollieren können, wie man sehr effizient spricht.

Wenn Sie beispielsweise ein Raster mit Daten haben, die die Quelle basierend auf einer Entscheidung variieren, sollten zwei ObjectDatasources konfiguriert werden und diese Entscheidung sollte auf der Seite und nicht in der ObjectDatasource liegen. Dies ist der bevorzugte Weg, um sie zu verwenden und die Probleme zu vermeiden, die die Leute bei anderen Antworten versuchen.

Verwandte Themen