Frage

Ich arbeite an einer kleinen Anwendung von Grund auf und verwenden es, um zu versuchen, mich Architektur und Design-Konzepte zu lehren. Es ist eine .NET 3.5, WPF-Anwendung, und ich bin mit SQL Compact Edition als meine Daten zu speichern.

Ich arbeite an der Business-Logik-Schicht, und habe gerade jetzt die DAL zu schreiben begonnen. Ich verwende nur SqlCeComamnds einfache Abfragen zu senden über und SqlCeResultSet auf die Ergebnisse zu erhalten. Ich beginne meine Insert und Update-Methoden zu entwerfen, und hier ist das Problem - ich weiß es nicht der beste Weg, die notwendigen Daten aus dem BLL in die DAL zu bekommen. Muss ich in einer generischen Sammlung übergeben? Muss ich eine massive Parameterliste mit allen Daten für die Datenbank? Muß ich einfach im eigentlichen Business-Objekt übergeben (also meine DAL zur conrete Sachen in der BLL binden?).

Ich dachte über Schnittstellen - einfach IBusinessObjectA in die DAL vorbei, die die Einfachheit bietet, die ich suche, ohne mich zu binden zu fest zu aktuellen Implementierungen. Was denkt ihr?

War es hilfreich?

Lösung

Wenn ich in Ihrer Position war, würde ich wahrscheinlich LINQ to SQL verwenden, um meine Datenzugriffsschicht zu definieren - es wird Ihnen viel Arbeit sparen alle, dass SqlCeFooBar Sachen zu erhalten und geben Sie einen Designer (von Sorten) für die Pflege Ihrer Datenbank, die Sie sonst fehlen würden, mit SQL CE.

Also in diesem Fall, würde ich wahrscheinlich Paar der Business-Logik-Schicht ziemlich eng an den von der L2S Schicht ausgesetzt Einheiten. Die Begründung ist, dass die Entitäten sind die Business-Objekte, wenn auch frei von irgendwelchen Dienstleistungen.

Ich würde wahrscheinlich die Einheiten zwar wie weit die Hierarchie als UI bekommen nicht zulassen. Auf dieser Ebene macht es viel mehr Sinn, ein Modell für die Ansicht speziell zu nutzen - vor allem in Anbetracht, dass Sie WPF verwenden

.

Natürlich all dies hängt von der Größe und Komplexität der Anwendung. Ich nehme an, es ist eine ziemlich kleine Anwendung (Single-User?) Gegeben, dass Sie SQL CE verwenden.

Andere Tipps

Ich glaube nicht, gibt es eine einfache Antwort auf Ihre Fragen, denn es gibt viele Optionen sind je nach den Umständen. Ich habe sie nützlich fanden unten, um die zwei Bücher zu lesen verstehen mich die Probleme, die Sie besser zu beschreiben.

  • MS .NET: Architecting Anwendungen für das Enterprise (Esposito, Saltarello)
  • MS Application Architecture Guide, 2. Auflage.

Das zweite Buch ist im Internet verfügbar. Schauen Sie hier .

Ich denke, es OK ist, das Business-Objekt auf die Datenzugriffsschicht zu übergeben. Ich denke, die BLL Aufgabe ist es nur, um die Arbeit mit seinen Objekten, zu überprüfen, ob alle Regeln eingehalten werden, was gespeichert wird, von wem, auf welchen Felder, Zeit, etc.

Sobald es getan hat, dass sie es an die DAL passieren sollte, und ich denke, es ist, es ist Aufgabe, herauszufinden, wie zu konvertieren, was es zu etwas bekam, die beibehalten werden kann, aber es wird nicht überprüfen, was beibehalten wird oder gelesen oder von wem, wird es tun es einfach. Dies könnte gerade foward sein, a la Linq, aber wenn Sie Ihre Logik mdoels 1 nicht Ihr Datenmodell entsprechen: 1, dann sollten die DAL alle die Konvertierung tun.

Über Ihre DAL auf die Sachen in der BLL binden, ich glaube, Sie umgekehrt sorgen sollte, Ihre BLL auf Ihre DAL binden. Ich würde eine Schnittstelle verwenden, um Ihre DAL darstellen (wie in IRepository), dass die Art und Weise Sie Ihre BLL rufen jede Art von persistance Mechanismus nur durch eine Änderung der Art von IRepository machen kann es verwendet (zusätzliche Punkte, wenn Sie IoC verwenden: P). Die konkreten Klassen, die die IRepository implementieren würde auf die Business-Objekte gebunden werden, aber sie müssen wissen, was es ist, dass sie sparen sie nicht? während die BLL muss nicht wissen, was die Einsparung tut.

Um Business-Objekt in der DAL ist die einfachere und schnellste Methode übergeben. Es funktioniert in kleinen Projekten, haben aber dieselben Nachteile:

1) Business Objects sind Teil der BLL Schicht, und wenn Sie Objekte in BLL passieren dann wird DAL von BLL abhängig. niedrige Schicht kennt obere -. Dies widerspricht der Idee der Schichten überhaupt

2) Business Object ist usially sehr komplex es direkt in BD zu speichern. In diesem Fall ist es besser, neue „Mapper“ Zwischenschicht einzuführen.

Um alle diese Probleme zu überwinden ich usially Schnittstelle zu DAL unabhängig machen von Business Objects. Ich benutze „Row“ Klassen statt - Darstellung eines Datensatzes in der Datenbank oder XML. In .NET automatisch generierten 3.5 LinqToSql können Klassen für diesen Zweck verwendet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top