3 oder 4 Schichten Architektur

03/11/2009 - 15:41 von Markus | Report spam
Hi NG,
ich soll eine Anwendung in C# für eine Projektsoftware realisieren und habe
mir eine 4 Schichten Architektur vorgestellt.
1) Einen Database Layer der auf SQL Datenbanken, XML Files, etc.
schreibt/liest
2) Einen Data Access Layer, der von dem darunter liegenden Database Layer
abstrahiert und generische CRUD Methode bereitstellt
3) Einen Business Logic Layer in dem die Anwendungslogik sitz
4) Einen Presentation Layer zB mit Windows Forms


Presentation Layer
Business Logic
Data Access Layer
SQL Layer | File Layer | Cloud Layer


Wàhrend der Entwicklung bin ich nun in folgenden Gewissenskonflik gekommen:

Der Data Access Layer hat eine abstrakte Superklasse DAL mit einer Methode
CreateProject und u.a. eine Klassen DALSql die von DAL erbt und die
notwendigen Methoden im SQL Database Layer (Linq Zeugs) aufruft um ein
Projekt zu erstellen. Das bedeutet auch dass es eine "Struktur" Projekt im
Data Access Layer gibt.

public class DALSql : DAL
{
public override Project CreateProject(string name)
{
// ... Linq Klassen , db.SubmitChanges() etc.
}

public override Project ReadProject(int projectId)
{
// .. Linq Zeugs, Select ... etc.
}
}

Aber andererseits ist "Projekt" ein Objekt aus der Fachdomàne, und sollte im
Business Layer sitzen. Wenn ich jetzt im Presentation Layer ein Projekt
anzeige muss ich natürlich den Business Layer verwenden (Berechnungen, usw),
aber auch den darunter liegenden Layer verwenden um überhaupt ein "Projekt"
Objekt zu haben. IMHO sollte das nicht sein, weil Layer Konzept *kopfschmerz*

"Projekt" etc. kann ich aber nicht ohne weiteres auf den Business Layer
hochziehen, weil ich sie ja im Data Access Layer brauche. Also bliebe mir nix
anderes übrig als die Klassen quasi zu duplizieren. Ein BusinessLayer.Projekt
und ein DataAccessLayer.Projekt . Zu allem Unglück habe ich auch noch eine
Linq2SQL Klassen Project.


Wie ich es drehe und wende, es wird nicht schöner. Hat jemand eine Idee ?

My LinkedIn Profile:
http://www.linkedin.com/in/noebauer
Xing:
https://www.xing.com/profile/Markus_Noebauer
 

Lesen sie die antworten

#1 Frank Dzaebel
03/11/2009 - 20:35 | Warnen spam
Hallo Markus,

ich soll eine Anwendung in C# für eine Projektsoftware realisieren
und habe mir eine 4 Schichten Architektur vorgestellt.



Das entscheidende ist ja im Prinzip nicht, wie Du es gerade siehst,
sondern welche *Anforderungen* an Deine Software, Dein
Projekt gestellt sind. Nur könnte ich Dir einen Rat geben, ob
das so sinnvoll ist. Mit dem (eng gekoppelten) "Linq To Sql"
ist bspw. die Schichtung deutlich schwieriger als etwa mit dem
Entity Framework. Ganz klar der Rat da: nimm in Enterprise
n-tier Szenarien das Entity Framework. Fast schon in Betracht
ziehen, die VS 2010 Beta 2 bei neuen Projekten zu benutzen,
die bzgl. des EF 4 nochmals drauflegt.

[Video : LINQ-to-SQL versus ADO.NET Entity Framework]
http://www.microsoft.com/germany/ms...n_de_30124
(eine der zahlreichen Vergleiche von EF und LTS)

Du hast auch normal selten reine horizontale Schichten à la OSI
Modell o.à., sondern immer auch "gemeinsame Komponenten",
die von allen zugreifbar sind (also vertikal).

Beim ganzen ist folgendes als Hintergrundlektüre sehr empfehlenswert:

[Microsoft Application Architecture Guide, 2nd Edition]
http://msdn.microsoft.com/en-us/lib...73617.aspx

Weil die Presentation Layer bei Dir ja auch noch offen
sein soll/ist, sind auch die pragmatischen Ansàtze
unbedingt zu beachten, (deswegen... Anforderungen wichtig) :

[MSDN Webcast Serie: Pragmatische Web-Architektur]
http://www.microsoft.com/germany/ms...04-02.mspx

[Neue MSDN Webcast-Serie zu ASP.NET Architektur | PGK GmbH]
http://www.pgk.de/news/2009-06-24_pwa.aspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen