2009-05-05 12 views
0

Ich bin ziemlich neu in C# und versuche eine N-Tier-Web-Anwendung zu schreiben. Um sicherzustellen, dass ich die Logik und den Code an die richtige Stelle setze, habe ich nur eine Frage, wo ich meinen Code platzieren soll.In welchem ​​Abschnitt soll ich meinen SqlDataReader-Code einfügen?

Ich habe drei Hauptteil:

  1. Data Access Code - in einem Ordner "Businesslogic" in meinem App_Code Ordner mit dem Namen.

  2. Business-Logik-Code - in einem Ordner namens "DataAccess" in meinem App_Code-Ordner.

  3. Die Präsentationsschicht - Alle UI

Wenn zum Beispiel ich brauche einen SqlDataReader zu schreiben Datensätze aus der Datenbank abgerufen werden, wo, wo würde ich den Code physisch schreiben? In der BLL oder der DAL?

IE Von der Präsentationsschicht aus rufe ich den BLL-Code auf.

ContentBLL content = new ContentBLL(); 
//some code to call the BLL layer... 

Hier fange ich an, verwirrt zu werden. In der Business-Layer-Logic-Ebene, die ich anrufe, schreibe ich hier den SqlDataReader-Code oder erstelle einen weiteren Schritt und schreibe den SQlDataReader-Code in die Datenzugriffsebene.

IE In der BLL sollte ich eine Methode hinzufügen, die die DAL genannt? EG

public static ContentBLL GetPageContent(intID) 
{ 
return ContentDAL.GetItem(ID) 
} 

und dann in meinem DAL habe ich eine Methode, um den tatsächlichen SqlDataReader EG

public static ContentBLL GetItem(int id) 
{ 
//return the SqlDataReader code... 
} 

ich von den Tutorials auf der asp.net Website für die jedoch zu erfahren, habe versucht, auszuführen DAL im Tutorial verwenden sie stattdessen Datensätze. Jede Hilfe würde sehr geschätzt werden.

Antwort

2

Mein typischer Ansatz ist, was ich scherzhaft die 2.5-Tier-Methode nenne.

Bei dieser Methode verwende ich den folgenden Ansatz:

   Presentation Layer 

       Businesss Object Layer/Data Serialization 

       Database Service Layer 

Jedes Business-Objekt in der Business-Schicht einen Konstruktor hat, der eine IDataReader akzeptiert. Dieser Leser wird dann gelesen, um das Objekt zu füllen.

Die Datenbankschicht schließt alle Datenbankzugriffsanforderungen und gibt Leser zurück.

Obwohl dies nicht so rein ist, wie manche Leute gerne hätten, besteht die Alternative darin, dumme Container-Klassen zu erstellen, um die Daten zwischen Tiers zu marshalieren, und ich bevorzuge nur einen IDataReader.

Darüber hinaus bin ich mit einem IDataReader und nicht mit einem SqlDataReader immer noch lose mit meinem DAL verbunden und kann jede Art von Persistenz implementieren, nicht nur SQLServer.

+0

Hallo FlySwat, danke für die schnelle Antwort. Ich mag den Klang deiner Annäherung. Hättest du ein einfaches Beispiel, das du mir demonstrieren könntest? – Jason

0

Das klingt für mich wie ein klassischer Fall von Über-Engineering.

Ich werde nicht argumentieren, dass ein wenig Over-Engineering während der Lernphase erforderlich ist, aber ich denke, wenn zu irgendeinem Zeitpunkt es mehr Verwirrung erzeugt, müssen Sie zurücktreten und Ihren Ansatz überdenken.

Versuchen Sie, ein wenig mehr über ASP.NET zu lernen und seien Sie nicht so über die Semantik gestresst. Wenn Sie unvoreingenommen bleiben und Ihren Code umgestalten können, können Sie Ihre Frage wahrscheinlich selbst beantworten.

Verwandte Themen