News

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!

Mehr erfahren
Blog
Payrolling

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

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.

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

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.

Engineering

DevOps bei Apriko

13. November 2023

Die Entwicklung moderner Software erfordert agile Methoden, um schnell auf Marktveränderungen reagieren zu können und gleichzeitig die Qualität sicherzustellen. DevOps bietet hier die ideale Lösung durch die enge Verzahnung von Entwicklung und Betrieb.

Engineering

Automatische Generierung der grafischen Benutzeroberfläche (UI)

26. April 2024

Ein zentrales Designprinzip der Software-Architektur von Apriko ist es, so viel Boilerplate-Code wie möglich automatisch zu generieren oder Logik abzuleiten.

Job

Senior Frontend Engineer

12. August 2024

Als Frontend Engineer in unserem Kanban Team treibst du die Domäne voran und prägst Vision, Roadmap und Features. Du implementierst Features von Frontend bis Backend und gestaltest den Prozess aktiv mit. Mit unseren UX Designern entwickelst du benutzerfreundliche Interfaces und UI Komponenten. Im Team erstellst du grafische Oberflächen, APIs und entwickelst diese weiter. Du trägst zur Gestaltung und Weiterentwicklung unserer deklarativen UI-Engine bei und legst Wert auf sauberen Code, übersichtliche Struktur, hohe Leistung und zweckmässige Testabdeckung.

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.