News

Doppelsieg für Apriko: Gold und Silber bei den Best of Swiss Software­-Awards 2024

Im Kongresshaus Zürich wurden am 19. November 2024 die besten Softwarelösungen der Schweiz ausgezeichnet. Besonders strahlend: Das Start-up Apriko, das mit Gold in der Kategorie Business Solutions und Silber in der Kategorie Cloud Native Solutions gleich doppelt überzeugte.

Mehr erfahren
Blog

Was ist Payrolling?

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.

Mehr erfahren

Schneller und besser zum Ziel: Mit automatisierter Codegenerierung

Engineering
16. April 2024

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:

  • CRUD-Operationen (Create, Read, Update, Delete)
  • Data Transfer Objects (DTOs)
  • Registrierungen für Dependency Injection (DI)
  • Controller inklusive korrekten Routen
  • Ergänzungen der Data Definition Language (DDL)

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.

1. Die Grundlage: Die Entität Order

Diese Definition zeigt, wie die Entität Order strukturiert ist:

  • EntityCodeGeneration-Attribut: Dieses Attribut ist der Einstiegspunkt für unseren Code-Generator und enthält die notwendigen Informationen für die physische Order-Struktur und DI-Registry.
  • MutableState-Attribut: Definiert in welchem Zustand die Entität über CRUD-Operationen verändert werden kann.
  • StrictRequired-Attribut: Die Felder OrderNumber, OrderDate und TotalAmount sind Pflichtfelder, die immer ausgefüllt sein müssen.
  • UniqueKey-Attribut: Das Feld OrderNumber muss einzigartig sein.
  • NotSettableProperty-Attribut: Der Status der Bestellung (State) ist eine schreibgeschützte Eigenschaft, die nur durch spezifische Logik, z.B. Commands, geändert werden kann.

2. Automatische Generierung von CRUD-Operationen

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.

3. Erweiterung durch Commands: Geschäftslogik über CRUD hinaus

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:

4. Erklärung des Command-Beispiels

Der OrderConfirmCommand ist ein einfaches Beispiel für die Erweiterung der Geschäftslogik:

  • CommandCodeGeneration-Attribut: Dieses Attribut definiert den Command Confirm, der über die Route {id}/confirm aufgerufen wird. Es definiert ausserdem den Basistyp der Zielentität (Order) und das dazugehörige Modell (OrderConfirmModel).
  • StatePrecondition-Attribut: Dieser Command kann nur ausgeführt werden, wenn die Bestellung sich im Zustand Pending befindet.
  • TargetState-Attribut: Der Zielzustand nach der Ausführung des Commands ist Confirmed.
  • CheckPreconditions-Methode: Hier wird überprüft, ob die Bestellung einen gültigen TotalAmount hat, bevor sie bestätigt wird.
  • ExecuteAsync-Methode: Diese Methode setzt den Status der Bestellung auf Confirmed.

5. Integration in die Microservices-Architektur

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.

6. Vorteile der kombinierten Nutzung von Entitäten und Commands

  • Effizienz und Konsistenz: Die automatische Generierung spart Zeit und gewährleistet konsistente Implementierungen.
  • Erweiterbarkeit: Neue Geschäftslogik kann einfach durch Hinzufügen von Commands integriert werden.
  • Bessere Wartbarkeit: Die klare Trennung von Standard-CRUD-Operationen und spezifischen Commands erleichtert die Wartung und Weiterentwicklung der Anwendung.

7. Fazit

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.

Hast du Fragen? Schreib uns – wir sind gespannt!

Michael Vogler
Software Architect

Mehr gute Gründe für Apriko

Job

Senior Full Stack Engineer

12. August 2024

Als Mitglied eines agilen Kanban Teams treibst du die Domäne voran und prägst Vision, Roadmap und Features. Du implementierst Features vom Backend bis zum Frontend, gestaltest den Prozess aktiv mit und entwickelst Services, APIs und die Engine für Backend, API und Web UI Generierung weiter. Konzeption und Umsetzung von Software-Infrastruktur-Anforderungen mit Fokus auf Clean Code, gute Performance und hohe Testabdeckung.

Engineering

Behavior Driven Development

15. April 2024

Bei Apriko streben wir nach einem hohen Automatisierungsgrad der Kundenprozesse, einer schnellen Markteinführung und einer kontinuierlichen Verbesserung unserer Software. Um dies in einer anspruchsvollen Domäne und komplexen Softwarearchitektur sicherzustellen, ist eine präzise Planung und konsequente Umsetzung von Anfang an unverzichtbar.

Engineering

Plattform für moderne Enterprise-Anwendungen

5. August 2024

Apriko wurde als Microservice-Applikation entwickelt, um den steigenden Anforderungen an moderne Enterprise-Anwendungen gerecht zu werden.

Lesezeit: 6 Minuten
Author: Michael Vogler

Cookies werden auf dieser Website verwendet, um die Nutzung zu analysieren und zu verbessern. Du kannst Cookies in deinen Browsereinstellungen deaktivieren, was jedoch die Funktionalität der Website beeinträchtigen kann.

Artikel teilen

Teile interessante Inhalte und nützliche Informationen.