Frage

Ich habe ein Repository (CustomerRepository), die Daten aus der Datenschicht abruft. Der größte Teil der Geschäftslogik ist in der Entity-Klasse (Customer), dass das Repository entweder akzeptiert oder zurückgibt.

Doch wo setzen Sie die globale logische Entität Geschäft (das gilt für alle Kunden)?

Zum Beispiel kann ich nicht alle Kunden auf bestimmte Benutzer zurückkehren möchten. Ich möchte nicht, dass die Logik im Repository setzen.

War es hilfreich?

Lösung

Ich stimme mit Robert Munteanu.

Grundsätzlich Sie aufrollen Ihre Business-Logik, die nicht inhärent in Ihrem Modell in einer mittleren Ebene ist. Die mittlere Ebene ist die Business-Tier / Business-Objekte / Business-Logik-Schicht / etc, sondern nur als Service-Tier bezeichnet. Es ist nicht ein Webservice, seine eine breite Verwendung des Begriffs Service, dass sein muß es aggregiert Funktionalität eines bestimmten Anwendungsgebietes.

Sie würden im Grunde eine Customer Klasse, die die Repository Referenz enthält. Ihre Präsentationsschicht würde die Service-Layer-Klasse verweisen.

Es gibt eine zusätzliche Auszeichnung, die als eine Vermutung von Ihrem Namen gemacht werden, können Sie .net verwenden, und wahrscheinlich mithilfe von LINQ als Repository SQL wie in NerdDinner beschrieben.

Das Repository gibt typischerweise IQueryable zu der Dienstschicht, so dass die Service-Layer-Kette zusammen mehrere Abfragen unterschiedliche Ergebnismengen zu bauen. Der Dienst wertet dann den Ausdruck ToList oder ein ähnliches Verfahren verwendet und gibt die an die Präsentationsschicht.

Andere Tipps

Wickeln Sie es hinter einem Service.

Legen Sie es in ein anderes Repository (BusinessRuleRepository) und haben CustomerRepository es verwenden.

oder

Wenn die Business-Logik nur die Ergebnisse ein Benutzer Begrenzung sehen Sie vielleicht ein Fassadenmuster mit einer Fabrik verwendet werden sollen. In diesem Fall würden Sie eine ICustomerRepository haben, die Ihre CustomerRepository Griffe und LimitedCustomerRepository (die CustomerRepository könnte kapseln) und eine CustomerRepositoryFactory, die die entsprechende ICustomerRepository für den Benutzer zurückgibt.

Ich denke, diese Arten von Funktionen in eine Dienstschicht trennt, ist der Weg zu gehen.

Ich baute vor kurzem ein System komplexe Prognose mit vielen Einheiten mit historischen Daten zu tun. Setzen Sie alle Datenzugriff Bits im Repository für jede Entität. Die komplizierte Prognose Logik hielt ich in einer Dienstschicht und geleitet, um die Repository-Objekte in je nach Bedarf.

Zusätzlicher Bonus war, dass ich eine einfache Möglichkeit hatte alle Prognose Logik zu externen Systemen zu belichten, indem Sie einfach eine Web-API-Schicht zu schaffen.

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