Gut gestaltete Abfragebefehle und / oder Spezifikationen

Ich habe seit geraumer Zeit nach einer guten Lösung für die Probleme gesucht, die durch das typische Repository-Muster verursacht werden (wachsende Liste von Methoden für spezielle Abfragen usw.). Siehe:http://ayende.com/blog/3955/repository-is-the-new-singleton).

Mir gefällt die Idee, Befehlsabfragen zu verwenden, besonders durch die Verwendung des Spezifikationsmusters. Mein Problem bei der Spezifikation besteht jedoch darin, dass sie sich nur auf die Kriterien einfacher Auswahlen bezieht (im Grunde genommen auf die WHERE-Klausel) und sich nicht mit den anderen Fragen von Abfragen befasst, z. B. Zusammenfügen, Gruppieren, Auswahl von Teilmengen oder Projektion. Grundsätzlich müssen alle zusätzlichen Rahmen, die viele Abfragen durchlaufen müssen, um den richtigen Datensatz zu erhalten.

(Anmerkung: Ich verwende den Begriff "Befehl" wie im Befehlsmuster, das auch als Abfrageobjekte bezeichnet wird. Ich spreche nicht von Befehl wie bei der Trennung von Befehl und Abfrage, bei der zwischen Abfragen und Befehlen unterschieden wird (Aktualisieren, Löschen, einfügen))

Daher suche ich nach Alternativen, die die gesamte Abfrage einschließen, aber dennoch so flexibel sind, dass Sie nicht nur Spaghetti-Repositorys gegen eine Explosion von Befehlsklassen austauschen.

Ich habe zum Beispiel Linqspecs verwendet, und obwohl es mir etwas wert ist, Auswahlkriterien aussagekräftige Namen zuzuweisen, reicht es einfach nicht aus. Vielleicht suche ich eine gemischte Lösung, die mehrere Ansätze kombiniert.

Ich suche nach Lösungen, die andere entwickelt haben, um entweder dieses Problem zu lösen oder ein anderes Problem anzusprechen, aber dennoch diese Anforderungen erfüllen. In dem verlinkten Artikel schlägt Ayende vor, den nHibernate-Kontext direkt zu verwenden. Ich bin jedoch der Meinung, dass dies die Geschäftsebene erheblich kompliziert, da sie jetzt auch Abfrageinformationen enthalten muss.

Ich werde eine Prämie dafür anbieten, sobald die Wartezeit abgelaufen ist. Bitte machen Sie Ihre Lösungen mit guten Erklärungen gut, und ich werde die beste Lösung auswählen und die Zweitplatzierten positiv bewerten.

HINWEIS: Ich suche nach etwas, das auf ORM basiert. Muss nicht explizit EF oder nHibernate sein, aber die sind die häufigsten und würden am besten passen. Wenn es leicht an andere ORMs angepasst werden kann, wäre das ein Bonus. LINQ-kompatibel wäre auch nett.

UPDATE: Ich bin wirklich überrascht, dass es hier nicht viele gute Vorschläge gibt. Es scheint, als wären die Leute entweder komplett CQRS oder sie sind komplett im Repository-Lager. Die meisten meiner Apps sind nicht komplex genug, um CQRS zu rechtfertigen (etwas, für das die meisten CQRS-Befürworter bereitwillig sagen, dass Sie es nicht verwenden sollten).

UPDATE: Hier scheint es ein wenig Verwirrung zu geben. Ich suche keine neue Datenzugriffstechnologie, sondern eine recht gut gestaltete Schnittstelle zwischen Unternehmen und Daten.

Im Idealfall suche ich eine Art Kreuzung zwischen Abfrageobjekten, Spezifikationsmuster und Repository. Wie ich oben sagte, befasst sich das Spezifikationsmuster nur mit dem WHERE-Klausel-Aspekt und nicht mit den anderen Aspekten der Abfrage, wie z. B. Verknüpfungen, Unterauswahlen usw. Repositorys behandeln die gesamte Abfrage, geraten jedoch nach einer Weile außer Kontrolle . Abfrageobjekte behandeln auch die gesamte Abfrage, aber ich möchte Repositorys nicht einfach durch Explosionen von Abfrageobjekten ersetzen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage