Frage

Ich bin meine erste Layered Anwendung entwerfen, die einer Daten, Geschäftsleben besteht, und eine Darstellungsschicht.

Meine Business-Komponenten (beispielsweise Business.Components.UserComponent) hat derzeit die folgende Methode:

public void Create(User entity)
{
    using (DataContext ctx = new DataContext())
    {
        ctx.Users.AddObject(entity);
        ctx.SaveChanges();
    }
}

Ich mag diesen Entwurf. Doch ich online einige Beispiele erlebt habe, dass würde die folgende Implementierung empfehlen:

public void Create(User entity)
{
    // Instanciate the User Data Access Component
    UserDAC dac = new UserDAC();
    dac.InsertUser(entity);
}

Dieses eine Data Access Component schaffen für alle Entitäten führen würde, die jeweils die grundlegenden Methoden, die (Erstellen, Bearbeiten, Löschen, ... etc).

Dies scheint doppelte Arbeit, da ich die Data Access Components mit den grundlegenden Methoden erstellen müsste, sowie die Business-Komponenten, die einfach nur die Methoden in der Data Access Component aufrufen.

Was wäre am beste Praxis als für richtig, die grundlegenden CRUD-Funktionalitäten in einer Layered Anwendung zu implementieren? Sollten sie 'codierte' in der Business-Komponente sein oder in einem Data Access Component?

War es hilfreich?

Lösung

Es hängt davon ab. Wenn Sie erwarten, dass Ihre Business-Schicht einfach CRUD-Operationen tun, als Sie Ihren ersten Ansatz folgen können. Wenn Sie einige große Business-Logik verwenden planen, wo Business-Komponente mit vielen Einheiten zweiten Ansatz arbeiten ist besser.

Grund, warum die Leute mögen zweiten Ansatz verwenden testen und persistance Ignoranz. Wenn Sie ersten Ansatz, um Ihre Business-Komponente verwenden, ist eng mit Entity Framework gekoppelt. Mocking Object ist nicht sehr einfache Aufgabe, so Testen hart ist. Wenn Sie nähern verwenden zweite Ihre Business-Schicht ist unabhängig von persistance Schicht. Sie können es einfach testen und Sie können sogar persistance Schicht ändern, wenn Sie benötigen. Aber das sind fortgeschrittene Konzepte, die Sie wahrscheinlich nicht im Moment suchen. Ihr Code würde eine zusätzliche Verbesserung müssen überprüfbar sein.

DAC kann auch als Repository implementiert werden. Es gibt viele Möglichkeiten, wie generische Repository zu erstellen, so dass Sie nur eine Klasse haben, und Sie definieren die Art Einheit, wenn Instancing-Repository:

var repository = new GenericRepository<User>();

Beachten Sie auch, dass separate Datenzugriffsschicht mit neuer Komplexität führt, denn manchmal ist es sinnvoll einzigen Kontext unter mehreren Repositorys zu teilen. Das kommt zusammen mit etwas als Einheit von Arbeitsmustern bekannt.

Es gibt viele Artikel über Repository und UOW Muster im Internet umzusetzen. Ich habe von ihnen als Favoriten zu Hause gespeichert einige so Wenn Sie interessiert sind, ich sie auf meine Antwort enthalten kann später auf.

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