logo

Muster für eine inhaltsangabe

Ein Spezifikationsmuster umreißt eine Geschäftsregel, die mit anderen Geschäftsregeln kombinierbar ist. In diesem Muster erbt eine Einheit der Geschäftslogik ihre Funktionalität von der abstrakten Aggregat-Composite Specification-Klasse. Die Composite Specification-Klasse verfügt über eine Funktion namens IsSatisfiedBy, die einen booleschen Wert zurückgibt. Nach der Instanziierung wird die Spezifikation mit anderen Spezifikationen « verkettet », so dass neue Spezifikationen leicht zu warten sind, aber dennoch hochgradig anpassbare Geschäftslogik. Darüber hinaus kann die Geschäftslogik bei der Instanziierung durch Methodenaufruf oder Umkehrung der Kontrolle ihren Status ändern, um delegierter anderer Klassen wie z. B. eines Persistenz-Repositorys zu werden. die Art und Weise, wie ich derzeit das Muster verwende, ist wahrscheinlich Overkill, aber ich mag die Idee des Entfernens, Wiederverwendens und allgemein machen die Logik mehr OO. Ich denke, Ihr Hauptziel hier ist es, sicherzustellen, dass Code so schnell wie möglich für die Bewertung einer zusammengesetzten Spezifikation beendet wird, wenn die Ausführung von untergeordneten Spezifikationen und eine oder mehrere eine Weile dauern kann, ja? Es ist immer möglich, Code außerhalb der Musterimplementierung aufzurufen, um eine Spezifikation asynchron aufzurufen. es ist nicht wirklich Ihre Sorge an diesem Punkt.

Bearbeiten: Nachdem Sie einige der Kommentare gelesen haben, scheint Ihr Problem eher mit einem allgemeinen Dispatch-Problem als mit dem Spezifikationsmuster zusammenzuhängt. angesichts Ihrer Schnittstellen könnten Sie einfach tun. Obwohl es nicht empfohlen wird, IQueryable aus einem Repository zurückzugeben, ist es vollkommen in Ordnung, sie innerhalb des Repositorys zu verwenden, um eine Reihe von Ergebnissen zu erstellen. Sie können diesen Ansatz sehen, der in der List-Methode oben verwendet wird, die IQueryable-Zwischenausdrücke verwendet, um die Liste der Includes der Abfrage zu erstellen, bevor die Abfrage mit den Kriterien der Spezifikation in der letzten Zeile ausgeführt wird. Durch die Verwendung der Java-Funktionsbits als Seele dieser Technik wird unser Leben viel einfacher und mit nicht mehr als ein paar einfachen Klassen können wir unsere dynamisch erstellten Spezifikationen wie folgt in Prädikate umwandeln: Gegebenenfalls können Sie Ihre Spezifikation verwenden, hier benutze ich sie, um eine einfache Validierung zu ermöglichen. Eine andere Verwendung ist für `Auswahl` z.B. Abrufen von Daten aus einem Repository Sie können eine einfache Ledger-Code-Spezifikation machen, um die LedgerCodes einer IBank zu überprüfen (dies ist ziemlich allgemein, dass Sie es spezifisch für Ihre Bedürfnisse machen müssen) Unten ist eine Beispiel-Repository-Methode, die eine Spezifikation verwendet, um Daten zu filtern und eifrig zu laden, die mit einem bestimmten generischen Entitätstyp verknüpft sind. , T. jedoch können Sie nicht wirklich brauchen das Muster und Sie shuoldn`t versuchen, das Problem in sie eins eine Domain-Driven-Design-Lösung zu dem Problem, wo Abfrage, Sortierung und Paging-Logik zu platzieren ist eine Spezifikation zu verwenden.



Les commentaires sont fermés.

YOU MAY LIKE

Muster von einem testament