ViennaNET: un conjunt de biblioteques per al backend

Hola a tots!

Som una comunitat de desenvolupadors .NET a Raiffeisenbank i volem parlar d'un conjunt de biblioteques d'infraestructura basades en .NET Core per crear ràpidament microserveis amb un únic ecosistema. El van portar a codi obert!

ViennaNET: un conjunt de biblioteques per al backend

Una mica d'història

Hi havia una vegada un gran projecte monolític, que a poc a poc es va anar convertint en un conjunt de microserveis (pots llegir sobre les característiques d'aquest procés a aquest article). Durant el procés, ens vam trobar amb el problema que, en crear nous microserveis, sovint havíem de copiar diverses solucions d'infraestructura, com ara configurar el registre, treballar amb una base de dades, WCF, etc. Un equip va treballar en aquest projecte i tothom ja estava acostumat a un enfocament establert per treballar amb infraestructura. Per tant, vam separar el codi comú en un dipòsit separat, vam embolicar les biblioteques recopilades en paquets Nuget i les vam col·locar al nostre dipòsit intern de Nuget.

Va passar el temps, el projecte es va fragmentar gradualment i es va voler crear nous mòduls del costat del client en un marc JS modern i executar-los al navegador. Vam començar a passar de WCF/SOAP a REST/HTTP, de manera que necessitàvem biblioteques noves per llançar ràpidament serveis basats en AspNet WebApi. La primera versió del .Net Framework 4.5 la va fer el nostre arquitecte pràcticament de genolls en el seu temps lliure, però fora de la caixa va permetre posar en marxa un servei amb tres línies a Program.cs que contenia autorització (NTLM), registre, Swagger, IoC/DI basat en Castle Windsor, clients HTTP personalitzats que reenvien diverses capçaleres per proporcionar un registre d'extrem a extrem durant tot el projecte. I tot això es podria configurar directament al fitxer de configuració del servei.

Tanmateix, no tot va anar bé: aquesta biblioteca va resultar ser extremadament inflexible pel que fa a la introducció de nous mòduls. Per exemple, si calia afegir algun programari intermediari especial, calia crear un nou muntatge i heretar de la classe base que executa el servei, cosa que era extremadament incòmode. Afortunadament, no hi havia gaire casos d'aquest tipus.

L'era de Docker i Kubernetes

Ha arribat el moment en què ens va arribar l'onada de Docker i Kubernetes, que vam observar de prop: després de tot, va ser una gran oportunitat per començar a avançar més en les tecnologies, a .Net Core. Això vol dir que necessitarem una nova infraestructura per executar els serveis: algunes biblioteques han migrat de .Net Framework a .Net Standard i .Net Core pràcticament sense canvis, algunes amb petites millores. Però sobretot volia reelaborar la funcionalitat associada amb el llançament de serveis a AspNet Core.

El primer que vam considerar va ser un concepte que eliminaria el principal inconvenient de la versió anterior: la manca de flexibilitat. Per això, es va decidir fer tot el sistema bibliotecari el més independent i modular possible i recollir els serveis necessaris per a la funcionalitat com a constructor.

L'objectiu principal és crear un enfocament unificat que descrigui com interactuar amb bases de dades, autobusos i altres serveis. Hem intentat que les integracions siguin ràpides i senzilles, i els desenvolupadors podien concentrar-se a escriure la lògica empresarial en lloc de la infraestructura: ja està llest. Un repositori comú ajuda a millorar l'experiència d'interacció dins dels equips: quan s'utilitzen infraestructures internes molt similars, és més fàcil unir-se al procés de desenvolupament d'un altre equip i intercanviar coneixements.

I per què necessitem el codi obert?

Volem mostrar la maduresa de la nostra experiència i rebre comentaris d'alta qualitat: una persona fora del banc podrà aportar alguna cosa d'ella mateixa. També estem interessats en el desenvolupament de pràctiques per treballar amb microserveis i DDD en .NET a la indústria potser algú voldrà fer-se càrrec de determinades parts del marc.

De fet, ViennaNET

Ara fem una ullada més de prop. El codi font complet es publica aquí.

ViennaNET.WebApi.*

Aquest conjunt de biblioteques consisteix en l'"arrel" ViennaNET.WebApi, que conté la classe de constructor per al servei CompanyHostBuilder, i un conjunt de configuradors ViennaNET.WebApi.Configurators.*, cadascun dels quals us permet afegir i configurar alguna funcionalitat al fitxer creat. servei. Entre els configuradors podeu trobar connexions per a registre, diagnòstic, tipus d'autenticació i autorització, swagger, etc.

ViennaNET.WebApi.Runners.* també conté creadors de serveis preconfigurats. Aquests paquets us permeten no recordar cada vegada que creeu un servei nou quins configuradors cal connectar. Tanmateix, no limiten de cap manera la funcionalitat del creador de serveis.

ViennaNET.Mediator.*

Biblioteques que permeten crear un bus intermediari intern per a ordres i peticions dins d'un servei. Aquest enfocament us permet reduir el nombre d'injeccions de DI a una, per exemple, als controladors. Per això, podeu afegir diversos decoradors a les sol·licituds, cosa que unifica el seu processament i redueix la quantitat de codi.

ViennaNET.Validació

Un conjunt que conté un conjunt de classes per crear regles de validació i seqüències a partir d'elles. És molt convenient per implementar la validació del domini, ja que permet descriure cada condició empresarial en forma d'una regla senzilla i separada.

ViennaNET.Redis

Una biblioteca amb embolcalls per treballar còmodament amb Redis com a memòria cau a la memòria.

ViennaNET.Especificacions

Un conjunt que conté classes que implementen el patró d'especificació.

Això no és tot el que hi ha al nostre conjunt. Podeu veure la resta al repositori de GitHub. Estem planejant llançar les nostres biblioteques per treballar amb bases de dades a OpenSource aviat.

Gràcies per la vostra atenció, esperem els vostres comentaris i sol·licituds d'extracció.

Font: www.habr.com

Compreu allotjament fiable per a llocs amb protecció DDoS, servidors VPS VDS 🔥 Compra allotjament web fiable amb protecció DDoS, servidors VPS VDS | ProHoster