ASP.NET Core Controller in drei Zeilen
Die ganze Arbeit neue Controller anzulegen auf drei Zeilen zu reduzieren klingt gut, aber unrealistisch? Wie immer ist etwas Vorarbeit notwendig, um das Ziel zu erreichen. Nehmen Sie sich kurz Zeit. Es wird sich lohnen.
Ausgangslage
Für unsere Projekte nutzen wir oft das CQS-Muster. Für die Kommandos und Abfragen, im Weiteren Funktionen genannt, haben wir entsprechende Schnittstellen in unserem idee5.Common – Paket definiert.
Damit andere Microservices die Funktionen aufrufen können, werden API-Controller erstellt. Diese sind kurz und einfach gehalten. Der Code kann kopiert und angepasst werden. Das wird aber schnell unübersichtlich, fehleranfällig und wartungsintensiv, wenn Funktionen entfernt oder hinzugefügt werden.
Wie jeder Entwickler, frage ich mich spätestens bei der dritten Wiederholung, wie das verbessert werden kann.
Erster Verbesserungsansatz
Als Erstes fällt einem der Einsatz generischer Controller ein. Damit entfällt das Schreiben des Codes für die einzelnen Endpunkte. Man muss nur einen Controller von diesem generischen Controller ableiten und den Konstruktor anpassen.
Das funktioniert schon sehr gut. Haben wir auch in unseren frühen MVC5-Projekten so gemacht.
Irgendwann stellt sich jedoch die Frage, warum man so viele Code-Dateien im Projekt hat und wie man die los wird.
Nächster Schritt der Verbesserung
Gräbt man etwas tiefer, findet man die Möglichkeit Controller zur Laufzeit zu registrieren. In ASP.NET Core wird dafür ein Application-Feature-Provider benötigt.
Damit der Provider die Controller dynamisch erzeugen kann, wird wieder ein generischer Controller definiert.
Der Provider sucht nach Funktions-Handlern und erzeugt die Controller auf Basis unseres generischen Controllers.
Die Controller können jetzt erzeugt werden, haben aber Namen, die von generischen Controller abgeleitet sind. Was noch wenig hilfreich ist. Die Namen passen wir über eine Controller-Model-Convention an.
Beim Start der Webanwendung kommen wir jetzt mit den versprochenen drei Zeilen aus und haben alle unsere Funktions-Handler als API-Endpunkte definiert.
copyright ©2023 idee5 gmbh | impressum | datenschutz | haftungsausschluss | agb | seitenübersicht