Aus Performancegründen ist es beim Einsatz von Doctrine oft notwendig, sich die einzelnen Use Cases der Anwendung näher anzuschauen und darauf optimiertes DQL zu schreiben. Das führt schnell zu großen Repository-Klassen. Oft enthalten sie für bestimmte Details auch duplizierten Code, und so ist schon bald nicht mehr klar, welche Methode eigentlich wofür genau gedacht war. Wenn sich dann noch die Anforderungen mit Auswirkung auf das DQL ändern, geht der Überblick komplett verloren und Business Rules werden nicht mehr konsistent angewendet.

Einen möglichen Ausweg bietet das von Eric Evans und Martin Fowler beschriebene ""Specification Pattern"". Anhand von Beispielen aus Praxisprojekten möchte ich zeigen, wie wir durch die Einführung von Specifications den Wildwuchs in Repositories zurückschneiden konnten. Dabei gehe ich auch darauf ein, wie sich Unit Tests für die Specifications schreiben lassen und welche Strategien für das *Eager Loading* zur Verfügung stehen.

Darüberhinaus ermöglichen Specifications strukturierte Suchabfragen in DQL auf Basis (komplexer) Formulare. In mandantenfähiger Software oder wiederverwendbaren Bundles helfen über den DI-Container eingesetzte Specifications dabei, das Kernmodell von kunden- und projektspezifischen Belangen freizuhalten.

Comments

Comments are closed.

sprain at 15:57 on 27 Oct 2017

Spannend ausgeführt, inhaltlich sehr interessant. Schade, gibts die Slides nicht zum Download.

Guter Ansatz, Datenbank Komplexität wurde nicht beachtet, habe bei dem Lösungsansatz Bauchschmerzen

Fachlich interessanter Content spannend erzählt!

Dirk Kredler at 18:38 on 27 Oct 2017

Interesting and entertaining! Developer's real life nightmares :D

Would have liked to see basic examples and implementations of the specification pattern (for those who had not heard of it previously).

Otherwise good talk!

Note: I feel sorry for teams not using English in code, comments, and documentation.

Jan Kowalke at 20:28 on 27 Oct 2017

Nice talk. It was entertaining hearing how you and your team reacted to new customer requests. But I'd have liked to see an overview of the implementation as well. Also it wasn't clear for me how the pattern reduced the database requests.

Ich konnte mir im Vorfeld nicht viel unter dem Thema vorstellen, weshalb mich glücklicherweise meine Neugier in diesen Talk geführt hat. Der Ansatz ist nachvollziehbar und hat das Potential etwas Licht in die oft zu komplexen Query-Konstrukte zu bringen. Den Grad der Komplexität fand ich sehr passend, mehr wäre im Rahmen von 45min vermutlich nicht möglich gewesen. Sehr interessant und spannend fand ich es ein praktisches Beispiel für deutschen Programmcode zu sehen, da das nach dem Ansatz von DDD und der ubiquitous language in deutschsprachigen Firmen absolut Sinn ergibt und auch uns bevorstehen wird. Fände es toll, wenn das Thema auf einer zukünftigen Symfony Live als Workshop angeboten werden würde.