2009-03-12 6 views
0

SzenarioWie machst du eine generische Auswahlmethode für deine DAL?

Sie haben eine Baugruppe für die Datenübertragung Objekte 10 Klassen enthalten, die genau 10 Tabellen in der Datenbank repräsentieren. Sie erzeugen/eine DAL Schicht aufbauen, die Methoden wie hat -

Frage

DTOForTable1[] GetDataFromTable1(); 
    DTOForTable2[] GetDataFromTable2(); 

und so ....

auf Wie kann ich eine Methode machen, die die zahlreichen Methoden versteckt zu Daten von jeder Tabelle aus dem Client-Code abrufen? Die Methode, die ich zum Beispiel in Service oder Business-Schicht wollen würde, könnte aussehen wie-

SomeGenericDTO[] GetDataFromTable(TableTypeEnum tableTypeEnum); 
  1. Wie kann ich das tun? Ist das überhaupt möglich?

  2. Wenn ja für (1), ist es eine gute Übung?

  3. Wenn ja für (1) und (2) vereinfacht oder kompliziert das Design?

Vielen Dank im Voraus.

+0

Bitte kommentieren Sie, wenn Sie sich für einen Downvote entscheiden. – Perpetualcoder

Antwort

2

könnten Sie definieren es mögen:

T[] GetDataFromTable1<T>() where T:IDto 
{ 
    // you can know the table with the type of T 
} 

Das heißt, würde ich lieber entweder die verschiedenen Methoden oder sogar Klassen mit ihm zu arbeiten. Ich benutze stattdessen das Repository-Muster, ich schlage vor, nach Informationen darüber zu suchen.

+0

Ich habe über Repository Muster gelesen, aber ich glaube nicht, dass ich es vollständig verstehe. Kannst du einen Link empfehlen? – Perpetualcoder

+0

http://www.martinfowler.com/eaaCatalog/repository.html –

+0

In "Domain-Driven Design" von Eric Evans enthält Kapitel 6 Informationen über das Repository-Muster. –

1

Hier ist, wie meine DAL es tut:

List<entity> customers = SQL.Read(new SearchCriteria(), new Customers()); 

Zur Durchführung verbindet:

List<entity> customers = SQL.Read(new SearchCriteria(), new Customers(new Orders(new OrderDetails()))); 

Die DTO-Klasse selbst, welche Tabelle für den Zugriff auf und seine Eigenschaften bestimmen, welche Spalten abzurufen bestimmt.

Ich kann nicht antworten, ob es eine beste oder eine gute Praxis ist. Es ist die Praxis, die für mich seit langem funktioniert. Es gibt keine überflüssigen Methoden wie "GetById", "GetAll" usw.

+0

Das ist sehr interessant!Können Sie einen Link oder eine Probe bereitstellen? – Perpetualcoder

+0

@Perpetualcoder - mailen Sie mir bei ocdecio bei gmail dot com. –

1

Heutzutage ist es sehr üblich, dass Sie Ihre konkreten Tabellenklassen als erben einer abstrakten Tabellenzugriffsklasse implementieren. Die abstrakte Klasse verfügt über generische Methoden zum Abfragen einer Tabelle. Jede konkrete Klasse kann deklarieren, welche entsprechende Datenbanktabelle (auch vielleicht Spalten und Inter-Tabellenbeziehungen).

Entwurfsmuster, die dazu beitragen, sind ActiveRecord und Table Data Gateway.

Verwandte Themen