ViennaNET: eine Sammlung von Bibliotheken fĂŒr das Backend.

Hallo zusammen!

Wir sind die .NET-Entwicklergemeinschaft der Raiffeisenbank und möchten Ihnen eine Sammlung von Infrastruktur-Bibliotheken auf .NET Core vorstellen, die die schnelle Erstellung von Mikroservices in einem einheitlichen Ökosystem ermöglichen. Wir haben sie als Open Source veröffentlicht!

ViennaNET: eine Sammlung von Bibliotheken fĂŒr das Backend.

Ein wenig Geschichte

FrĂŒher hatten wir ein großes monolithisches Projekt, das sich allmĂ€hlich in eine Reihe von Mikroservices verwandelte (ĂŒber die Besonderheiten dieses Prozesses können Sie lesen in in diesem Artikel). WĂ€hrend dieses Prozesses stießen wir auf das Problem, dass wir bei der Erstellung neuer Mikroservices oft verschiedene infrastrukturelle Lösungen kopieren mussten – wie z.B. Logging-Einstellungen, Datenbankzugriffe, WCF usw. An diesem Projekt arbeitete ein Team, und alle hatten sich bereits an einen bestimmten Ansatz im Umgang mit der Infrastruktur gewöhnt. Daher haben wir den gemeinsamen Code in ein separates Repository ausgegliedert, die erstellten Bibliotheken in Nuget-Pakete verpackt und in unser internes Nuget-Repository eingefĂŒgt.

Die Zeit verging, das Projekt zerfiel allmĂ€hlich, und der Wunsch entstand, neue Module fĂŒr die clientseitige Anwendung mit einem modernen Js-Framework zu erstellen und sie im Browser auszufĂŒhren. Wir begannen, von WCF/SOAP auf REST/HTTP umzusteigen, weshalb wir neue Bibliotheken benötigten, um Dienste schnell auf der Grundlage von AspNet WebApi zu starten. Die erste Version auf .Net Framework 4.5 wurde von unserem Architekten quasi in seiner Freizeit zusammengestellt, doch sie ermöglichte bereits mit drei Zeilen in Program.cs den Start eines Services, der Authentifizierung (NTLM), Logging, Swagger, IoC/DI auf Basis von Castle Windsor, konfigurierte HTTP-Clients, die verschiedene Header fĂŒr ein durchgĂ€ngiges Logging im gesamten Projekt durchleiteten. All dies konnte zusĂ€tzlich direkt in der Konfigurationsdatei des Services eingestellt werden.

Doch nicht alles lief reibungslos: Diese Bibliothek erwies sich als Ă€ußerst unflexibel, wenn es um die Integration neuer Module ging. Wenn beispielsweise ein spezielles Middleware hinzugefĂŒgt werden sollte, musste eine neue Assembly erstellt werden, die von der Basisklasse abgeleitet war, die den Service startete, was Ă€ußerst umstĂ€ndlich war. Zum GlĂŒck gab es solche FĂ€lle nicht allzu oft.

Die Ära von Docker und Kubernetes

Es ist an der Zeit, dass auch wir in den Genuss der Welle von Docker und Kubernetes kommen, die wir schon lange beobachtet haben: Es war eine großartige Gelegenheit, den Schritt zu moderneren Technologien wie .Net Core zu wagen. Daher benötigen wir eine neue Infrastruktur, um unsere Dienste bereitzustellen: Einige Bibliotheken wurden nahezu unverĂ€ndert von .Net Framework auf .Net Standard und .Net Core ĂŒbertragen, wĂ€hrend andere mit kleineren Verbesserungen versehen wurden. Am meisten wollten wir jedoch die FunktionalitĂ€ten ĂŒberarbeiten, die mit dem Start von Diensten auf AspNet Core verbunden sind.

ZunÀchst wurde ein Konzept in Betracht gezogen, das den Hauptnachteil der vorherigen Version beseitigt: fehlende FlexibilitÀt. Daher wurde entschieden, das gesamte Bibliothekssystem so unabhÀngig und modular wie möglich zu gestalten und die erforderlichen Dienste wie ein Konstruktionsspielzeug zusammenzustellen.

Das Hauptziel ist es, einen einheitlichen Ansatz zu schaffen, der beschreibt, wie man mit Datenbanken, Bussen und anderen Diensten interagiert. Wir haben uns bemĂŒht, die Integrationen schnell und reibungslos zu gestalten, sodass sich Entwickler auf das Schreiben von GeschĂ€ftslogik konzentrieren können, und nicht auf die Infrastruktur – diese ist bereits bereit. Das gemeinsame Repository trĂ€gt dazu bei, die Interaktion innerhalb der Teams zu verbessern: Wenn sehr Ă€hnliche interne Infrastrukturen verwendet werden, fĂ€llt es leichter, in den Entwicklungsprozess eines anderen Teams einzusteigen und Expertise auszutauschen.

Und warum benötigen wir Open Source?

Wir möchten die Reife unserer Expertise zeigen und qualitativ hochwertiges Feedback erhalten: Eine Person außerhalb der Bank kann etwas Eigenes einbringen. Außerdem sind wir an der Entwicklung von Praktiken fĂŒr die Arbeit mit Mikrodiensten und DDD auf .NET in der Industrie interessiert, möglicherweise möchte jemand bestimmte Teile des Frameworks mitnehmen.

Eigentlich, ViennaNET

Lassen Sie uns nun alles im Detail betrachten. Den vollstÀndigen Quellcode finden Sie hier.

ViennaNET.WebApi.*

Dieses Bibliothekspaket besteht aus dem "Core" ViennaNET.WebApi, das eine Builder-Klasse fĂŒr den Service CompanyHostBuilder enthĂ€lt, sowie einer Reihe von Konfiguratoren in ViennaNET.WebApi.Configurators.*, die jeweils Funktionen zum erstellten Service hinzufĂŒgen und konfigurieren können. Unter diesen Konfiguratoren finden Sie Schnittstellen fĂŒr Logging, Diagnostik, Authentifizierung und Autorisierung, Swagger usw.

Außerdem enthĂ€lt ViennaNET.WebApi.Runners.* vorkonfigurierte Service-Builder. Diese Pakete verhindern, dass man sich jedes Mal erinnern muss, welche Konfiguratoren man beim Erstellen eines neuen Services anschließen sollte. Dabei schrĂ€nken sie die FunktionalitĂ€t des Service-Builders nicht ein.

ViennaNET.Mediator.*

Bibliotheken, die es ermöglichen, einen internen Mediator-Bus fĂŒr Befehle und Anfragen innerhalb des Services zu erstellen. Dieser Ansatz reduziert die Anzahl der DI-Injektionen auf eine, zum Beispiel in den Controllern. Dadurch können verschiedene Dekoratoren fĂŒr Anfragen hinzugefĂŒgt werden, was deren Verarbeitung vereinheitlicht und den Code reduziert.

ViennaNET.Validation

Eine Assembly, die eine Reihe von Klassen zur Erstellung von Validierungsregeln und deren Sequenzen enthĂ€lt. Sehr nĂŒtzlich fĂŒr die Implementierung von Domain-Validierungen, da sie es ermöglicht, jede GeschĂ€ftsbedingung als einfache, separate Regel zu beschreiben.

ViennaNET.Redis

Eine Bibliothek mit Wrappern fĂŒr die einfache Arbeit mit Redis als In-Memory-Cache.

ViennaNET.Specifications

Eine Assembly, die Klassen enthĂ€lt, die das Muster „Spezifikation“ implementieren.

Das ist bei weitem nicht alles, was in unserem Paket enthalten ist. Den Rest können Sie sich ansehen im Repository auf GitHub. Geplant ist bald die Veröffentlichung unserer Bibliotheken fĂŒr die Arbeit mit Datenbanken als Open Source.

Danke fĂŒr Ihre Aufmerksamkeit, wir freuen uns auf Ihre Kommentare und Pull Requests.

Quelle: habr.com

Erwerben Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster