2009-08-19 5 views
1

Wenn Sie mit Windows Form-Steuerelementen und LINQ arbeiten, gibt es eine "Beste Option" für die Art und Weise, wie Ihr Unternehmenslayer die Daten zurückgibt?Windows Form Controls und LINQ; Was soll ich zurückgeben?

Momentan gebe ich DataTables zurück, damit ich die DataSource dann auf die zurückgegebene DataTable setzen kann. Gibt es eine bessere Option? Warum?

public class BLLMatrix 
{ 
    public static DataTable GetMaintItems(int iCat) 
    { 
     IQueryable<tblCaseNotesMaintItem> tItems = DALMatrix.GetCNTable(); 
     return 
      (tItems.Where(item => item.CategoryID == iCat & item.IsActive).OrderBy(item => item.OrderID).Select(
       item => new { item.ItemID, item.ItemDescription })).CopyLinqToDataTable(); 
    } 

internal static class DALMatrix 
{ 
    internal static MatrixDataContext MatrixDataContext = new MatrixDataContext(); 

    internal static Table<tblCaseNotesMaintItem> GetCNTable() 
    { 
     return MatrixDataContext.GetTable<tblCaseNotesMaintItem>(); 
    } 

Ich fand diese ähnliche Frage ->Separating concerns with Linq To SQL and DTO's

Antwort

4

Ich persönlich ziehe Transfer Objects Daten, aber Datasets in eine Prise zu arbeiten.

Grundsätzlich ist die Idee, dass, wenn Sie mit Datenübertragungsobjekten arbeiten (die keine Logik haben und das Modell darstellen, mit dem Sie auf dem Client arbeiten möchten), eine Abstraktion ist, von der unabhängig davon leben kann Änderungen am vorderen oder hinteren Ende. Es ist normalerweise eine gute Idee.

DataSets sind nützlich, aber ihr Mangel an Kompilierzeitsicherheit (nicht im Fall von stark typisierten DataSets) wegen numerischen/string-basierten Feldzugriffs kann ein Problem darstellen.

In der Regel gibt es auch einen hohen Aufwand beim Serialisieren von DataSets im Vergleich zu einem Datenübertragungsobjekt.

+0

Wenn Sie DataSet sagen, die DataTables umfasst, richtig? Hast du ein gutes Beispiel für DTO's? Ich werde Google, aber wenn Sie einen guten haben, bevorzuge ich Empfehlungen ... –

+1

@Refract Paladin: Wikipedia hat einen guten Eintrag auf Datentransferobjekte hier: http://en.wikipedia.org/wiki/Data_transfer_object und es gibt eine gute Artikel in der August 2009-Ausgabe des MSDN-Titels "Vor- und Nachteile von Datenübertragungsobjekten" unter: http://msdn.microsoft.com/en-us/magazine/ee236638.aspx – casperOne

1

Ich möchte meine eigenen Modellklassen wegen des Overhead von DataSets erstellen. Wenn Sie ein Objektarray (oder ein Objekt, das die IList-Schnittstelle implementiert) zurückgeben, können Sie dies immer noch der DataSource-Eigenschaft der meisten ASP.NET-Elemente zuordnen.

+0

* "Die meisten ASP.NET-Elemente. "* .... Gilt das auch für WinForm Controls ??? –

+0

WinForm-Elemente sollten auch eine IList des Objekts verwenden können. – CSharpAtl

+0

Danke, ich werde mich darum kümmern. –

1

ich persönlich meine Datasource gerne setzen, wenn Links zu List<YourObject>

1

Ich ziehe die Business-Logik mit einer Instanz eines Objekts zurück, wie Auto, ICAR oder List (Car) der DAL für das Objekt füllen lassen Sie. Auf diese Weise erhalten Sie eine klare Trennung zwischen Daten und UI.

1

Ich möchte lieber DataReaders als Datasets verwenden, und ich verwende einen Iterator-Block in der Datenebene, um den Datenreader in eine IEnumerable<IDataRecord> zu verwandeln. Von dort aus habe ich eine Art zusätzlichen Schritt zwischen der Geschäfts- und der Datenschicht, um IEnumerable in eine IEnumerable<MyBusinessObject> zu übersetzen. Sie sollten dies auch für die Datenbindung an die Präsentationsebene weitergeben können.

Ich mag diesen Ansatz, weil er die Daten- und Business-Schichten besser trennt: Die Business-Schicht sollte nicht in Form von Datensätzen denken, und die Datenschicht sollte nicht wissen müssen, wie sie Business-Objekte erstellen. Wenn ich das als eine separate Stufe betrachte, bekomme ich das Beste aus beiden Welten. Eine Änderung der Daten oder der Geschäftsstufen bedeutet, dass ich nur den Werkscode für das Konstrukt ändern muss, in dem meine Geschäftsobjekte erstellt werden.

Verwandte Themen