Verwenden von Ninject in einer SOLID-Anwendungsarchitektur

9

Ich beginne mit MVC3 und möchte eine flexible Architektur verwenden, also habe ich Dutzende Blogs, ein Buch (Pro ASP.NET MVC 3) gelesen, über SOLID-Prinzipien gelesen und bin schließlich zu einer Anwendungsstruktur gekommen, die mir gefällt (oder zumindest denke ich so weit, weil ich noch nichts darauf gebaut habe):

In dieser Struktur:

  • Domain enthält die POCO-Klassen und definiert die Service-Interfaces
  • Services implementiert Service-Schnittstellen und definiert Repository-Schnittstellen
  • Data implementiert Repository-Schnittstellen
  • WebUI und Domain use Services
  • Dienste verwenden Repositories
  • WebUI, Dienste und Daten hängen von der Domäne für POCO-Klassen ab

Der Hauptgrund für die Verwendung von Diensten durch Domain ist die Validierung eindeutiger Schlüssel in den Validate-Methoden der POCO (IValidatable) -Klassen.

Ich fange an, eine Referenzanwendung mit dieser Struktur zu erstellen, aber ich habe bisher zwei Probleme gesehen:

  1. Ich verwende ein Data.Tests-Projekt mit Komponententests für die Repositorys, habe aber keine Möglichkeit gefunden, eine Implementierung des Service (im Konstruktor oder anderweitig) in das Modell zu injizieren (mit Ninject) Daher kann die Validate-Methode den CheckUniqueKey für den Dienst aufrufen.

  2. Ich habe keinen Hinweis darauf gefunden, Ninject mit einem TEST-Projekt zu verbinden (viele davon für das WebUI-Projekt).

Ich versuche hier zu erreichen, dass ich von EF zu etwas anderem wie DAPPER wechseln kann, indem ich einfach die DATA-Baugruppe wechsle.

AKTUALISIEREN

Im Moment (vom 09-AUG-2011) funktioniert Ninject, aber ich denke, dass ich etwas vermisse.

Ich habe ein CustomerRepository mit zwei Konstruktoren:

%Vor%

Auf der TestInitialize:

%Vor%

In der Kundenklasse:

%Vor%

Was wäre der beste Weg Ninject in diesem Szenario zu verwenden?

Jede Hilfe wird sehr geschätzt.

ANTWORT, SORTIERUNG

Ich werde diese Frage als bisher angenommen betrachten. Ich könnte Ninject arbeiten, irgendwie, aber es sieht so aus, als würde das Dependency Inversion Principle (DIP) von SOLID noch etwas länger dauern.

In dieser Hinsicht musste ich Domain, Services und Daten zusammenlegen, ich werde zu einem anderen Zeitpunkt eine andere Frage stellen und das Projekt auf den üblichen Weg bringen.

Danke allen.

    
Miguel Veloso 03.08.2011, 00:29
quelle

1 Antwort

3

Unit-Tests sollten ohne Ninject durchgeführt werden. Erstellen Sie einfach eine Instanz des zu testenden Objekts und injizieren Sie manuell eine Kopie für jede Abhängigkeit.

Bei Integrationstests können Sie den Kernel inklusive aller Bindings von der Anwendung Bootstrapper und Rebind alles verwenden, was Sie durch ein Mock ersetzen möchten. z.B. Ersetzen Sie die Sitzungsbindung durch eine Sitzung, die statt einer echten Datenbank einen Datenspeicher im Speicher verwendet.

    
Remo Gloor 03.08.2011, 06:30
quelle