Apriko für den Unternehmerpreis 2024 nominiert!
Wir haben aufregende Neuigkeiten: Apriko ist zusammen mit COO und Gründungspartner Muhamed Ramiqi für den renommierten swissalbs Unternehmerpreis 2024 nominiert!
Wir haben aufregende Neuigkeiten: Apriko ist zusammen mit COO und Gründungspartner Muhamed Ramiqi für den renommierten swissalbs Unternehmerpreis 2024 nominiert!
Hast du dich schon mal gefragt, was Payrolling oder Payroll eigentlich beinhaltet? Und kennst du Try & Hire schon? Die Antwort ist nicht ganz einfach, weil der Begriff «Payrolling» für 2 unterschiedliche Dienstleistungen genutzt wird.
In der modernen Softwareentwicklung, insbesondere in Microservices-Architekturen, ist die Komplexität hoch. Aber was tun, damit bei einfachen und repetitiven Aufgaben keine Fehler entstehen? Bei Apriko setzen wir auf automatisierte Code-Generierung, um genau diese Stolpersteine aus dem Weg zu räumen. Unsere Herangehensweise? Ein deklarativer Ansatz, der es den Entwickler ermöglicht, sich auf die wirklich wesentlichen und komplexen Aufgaben zu konzentrieren.
Auf fachlich relevanten Entitäten können mit Attributen alle notwendigen Definitionen und Konfigurationen hinterlegt werden, ohne dafür selber Code schreiben zu müssen. Alle Standard-Funktionen einer modernen Applikation werden dadurch automatisch, durch einen eigens entwickelten Algorithmus, generiert. Dazu gehören:
Die Codegenerierung bildet die Basis unseres REST-API und ermöglicht uns fehlerfrei und innerhalb von Minuten neue Anforderungen umzusetzen. In diesem Artikel fokussieren wir uns auf die automatische Generierung für die Entität Order und zeigen, wie erweiterte Funktionalitäten durch Commands implementiert werden können.
Diese Definition zeigt, wie die Entität Order strukturiert ist:
Basierend auf der oben definierten Entität Order werden die entsprechenden CRUD-Operationen automatisch generiert. Dies umfasst das Erstellen, Lesen, Aktualisieren und Löschen von Bestellungen in der Datenbank. Zusätzlich werden die dazugehörigen DTOs (Data Transfer Objects) und Controller-Routen erstellt, die es ermöglichen, die Entität direkt in den Microservice zu integrieren.
Die automatische Codegenerierung stellt sicher, dass die CRUD-Operationen konsistent und nach den besten Praktiken implementiert werden, ohne dass Entwickler Zeit mit der manuellen Erstellung dieser Standardfunktionen verbringen müssen.
Während CRUD-Operationen (Create, Read, Update, Delete) den Kern vieler Microservices-Anwendungen ausmachen, gibt es oft Anforderungen, die über diese einfachen Operationen hinausgehen. Solche komplexen Anwendungsfälle können mit dem Konzept der Commands abgebildet werden. Commands sind spezifische Anweisungen, die komplexere Geschäftslogik implementieren und dabei mehr tun, als nur Daten in einer Datenbank zu verwalten. Commands sind besonders nützlich, wenn bestimmte Geschäftsregeln oder Bedingungen erfüllt sein müssen, bevor eine Operation ausgeführt werden kann. Die Automatisierung der Generierung solcher Commands reduziert nicht nur den Entwicklungsaufwand, sondern stellt auch sicher, dass die Implementierung konsistent und fehlerfrei erfolgt. Die Generierung der zusätzlichen Routen im Controller und der Einträge in der Dependency Injection (DI) Registry erfolgen automatisch.
Nehmen wir ein einfaches Beispiel für einen Command, der eine Bestellung bestätigt:
Der OrderConfirmCommand ist ein einfaches Beispiel für die Erweiterung der Geschäftslogik:
Die Generierung von Commands erweitert die Funktionalität der Entität und ermöglicht die Implementierung spezifischer Geschäftslogik. Gleichzeitig werden die notwendigen Routen im Controller und die Einträge in der DI-Registry automatisch hinzugefügt. Dadurch wird sichergestellt, dass neue Funktionen nahtlos in die bestehende Architektur integriert werden können.
Die Kombination aus der automatisierten Generierung von CRUD-Operationen für Entitäten und der Erweiterung durch Commands bietet eine robuste Lösung für die Entwicklung von Microservices in .NET. Diese Ansätze ermöglichen es uns, sowohl einfache als auch komplexe Geschäftslogik effizient und skalierbar zu implementieren, wodurch Entwickler sich stärker auf die Kernlogik ihrer Anwendung konzentrieren können. Die so gewonnene Zeit und Konsistenz trägt massgeblich zu einer höheren Qualität und Wartbarkeit der gesamten Codebasis bei.