Das Spezifikationsmuster könnte als Software-Anti-Muster betrachtet werden: Im Grunde nahm ich dieses Thema auf, weil ich in einer meiner früheren Arbeitspositionen solche Muster genutzt habe, um erfolgreich eine preisgekrönte Echtzeit-Engagement-Lösung im Telekommunikationsbereich zu entwerfen und zu implementieren, und jetzt kam wieder ein ähnliches Problem für mein Team auf, und dann bemerkte ich, dass die meisten meiner Kollegen nichts von einem solchen Muster gehört hatten. Sie können eine Spezifikation für Paging implementieren, Ihr Repository ändern und dann den Parameter innerhalb der List()-Methode verarbeiten. Oder wenn Sie Projektion benötigen: Nach dem Spezifikationspapier von Eric Evans und Martin Fowler ist das Spezifikationsmuster ein Software-Designmuster, das angewendet werden kann, um Geschäftsregeln zu kapseln, die den Zustand eines gewünschten Objekts definieren. Dies ist eine sehr leistungsfähige Möglichkeit, die Kopplung zu verringern und die Erweiterbarkeit zu erhöhen, um eine Teilmenge von Objekten auszuwählen, die bestimmten Kriterien entsprechen. Diese Kriterien können mithilfe logischer Operatoren kombiniert werden, um dann das zu bilden, was Eric und Martin Composite Specification nennen. Die Ausdrucksvariable enthält die Kerngeschäftsregel, die als «C-Func-Ausdruck» (LINQ-Ausdruck) an den Konstruktor übergeben wird. Wir können den neuen Spezifikationstyp direkt im Konstruktor des Seitenobjekts initialisieren. Der richtige Link ist github.com/tusharjoshi/java-specification-pattern Leider können wir sie nicht im Asserter der Seite wiederverwenden, da die Variablen der Ausdrucksspezifikationen als privat deklariert werden. Ich werde Ihnen zeigen, wie Sie den Code umgestalten können, um das erwähnte Problem zu beheben.

Die Spezifikationen können auch verkettet werden. Dies ermöglicht es Entwicklern, Objekte auf die Einhaltung einer oder aller Spezifikationen in einer Liste zu testen. Die akzeptierten Spezifikationen werden mit dem booleschen Operator Or in der IsSatisfiedBy-Methode verkettet. NotSpezifikation Ich hoffe, dass dieser Artikel hilfreich war. Sie können auch Teil 2 dieser Publikation lesen, in dem ich zusammengesetzte Spezifikationen besprochen habe. Folgen Sie mir auf Der Ecke, um zu erfahren, wann der Artikel veröffentlicht wird. Bitte löschen Sie Feedback und Kommentare im Kommentarbereich unten. Eine Schnittstelle, zwei abstrakte Klassen und fünf nicht abstrakte Klassen.

Das ist eine ganze Menge Code. Um genau zu sein, 76 Zeilen, ausgenommen die leeren. Wenn Sie Dinge wie XML-Kommentare und Komponententests hinzufügen, wird die Zahl noch höher. Beachten Sie, dass diese Klassen nur das «Framework» sind, wenn Sie so wollen. Sie müssten weiterhin eine Reihe von Klassen für die tatsächlichen Spezifikationen erstellen, die die Regeln Ihrer Domäne widerspiegeln. Wenn eine oder mehrere meiner Behauptungen oben wahr klingen, fragen Sie sich vielleicht, was mein Problem mit dem schlechten alten Spezifikationsmuster ist. Die Gründe sind vielfältig, aber wenn ich sie in einem Satz zusammenfassen würde, wäre es dieser: Das Spezifikationsmuster ist eine verherrlichte «if»-Anweisung.