ViennaNET: një grup bibliotekash për backend-in

Përshëndetje të gjithëve!

Ne jemi një komunitet zhvilluesish .NET të Raiffeisenbank dhe duam t'ju tregojmë rreth një grupi bibliotekash infrastrukturore në .NET Core për krijimin e shpejtë të mikroshërbjeve me një ekosistem të përbashkët. E kemi nxjerrë në Open Source!

ViennaNET: një grup bibliotekash për backend-in

Pak histori

Njëherë lexuam një projekt të madh monolit, i cili gradualisht po shndërrohej në një grup mikroshërbjesh (për veçoritë e këtij procesi mund të lexoni në këtë artikull). Gjatë procesit u përballëm me problemin që, kur krijonim mikroshërbje të reja, shpesh herë duhej të kopjonim zgjidhje të ndryshme infrastrukturore - si për shembull konfigurimin e logimit, punën me bazat e të dhënave, WCF etj. Një ekip punonte mbi këtë projekt, dhe të gjithë ishin mësuar me një qasje të caktuar në punën me infrastrukturën. Prandaj, ne nxorëm kodin e përbashkët në një depo të veçantë, bibliotekat e mbledhura i paketuam në paketa NuGet dhe i vendosëm në depo të brendshme NuGet.

Koha kalonte, projekti po thyehej pak nga pak, dhe shfaqej dëshira për të krijuar module të reja të pjesës klienti në një framework modern Js dhe për t'i nisur ato në shfletues. Filluam të kalojmë nga WCF/SOAP në REST/HTTP, prandaj na duhej bibliotekë e re për nisjen e shërbimeve në bazë të AspNet WebApi. Versioni i parë në .Net Framework 4.5 u krijua nga arkitektin tonë pothuajse në kohën e tij të lirë, por ai tashmë mundësonte me vetëm disa rreshta në Program.cs të niste një shërbim që përmbante autorizimin (NTLM), logimin, Swagger, IoC/DI në bazë të Castle Windsor, klientë HTTP të rregulluar që kalonin tituj të ndryshëm për të siguruar logimin e plotë në të gjithë projektin. Dhe gjithçka mund të konfigurohej përveç kësaj në dosjen e konfigurimit të shërbimit.

Megjithatë, nuk ishte gjithçka e lehtë: kjo bibliotekë rezultoi shumë e ngurtë për sa i përket implementimit të moduleve të reja. Për shembull, nëse kërkohej të shtohej ndonjë middleware të veçantë, duhet të krijohej një ndërtim i ri dhe të trashëgohej nga klasa bazë, që ishte shumë e pakëndshme. Me fat, raste të tilla nuk ishin shumë.

Epoka e Docker dhe Kubernetes

Ka arritur koha kur edhe ne erdhëm në valën me Docker dhe Kubernetes, të cilat i kishim vëzhguar ngushtë: ishte një mundësi e shkëlqyer për të filluar të lëviznim përpara me teknologjitë, në .Net Core. Kështu, na nevojitej një infrastrukturë e re për nisjen e shërbimeve: disa biblioteka kaluan nga .Net Framework në .Net Standard dhe .Net Core pothuajse pa ndryshime, disa me përmirësime të vogla. Por më së shumti donim të ripërdornim funksionalitetin e lidhur me nisjen e shërbimeve në AspNet Core.

Së pari, u shqyrtua koncepti që do të eliminonte mangësinë kryesore të versionit të kaluar: mungesa e fleksibilitetit. Prandaj, u vendos të bëhej e gjithë sistemi i bibliotekave sa më të pavarur dhe modular, dhe të montoheshin shërbimet e nevojshme si një ndërtues.

Qëllimi kryesor është të krijojmë një qasje të unifikuar që përshkruan se si të ndërveprohet me bazat e të dhënave, autobusët dhe shërbimet e tjera. Ne përpiqemi që integrimet të jenë të shpejta dhe pa dhimbje, në mënyrë që zhvilluesit të mund të përqendrohen në shkruan logjikën biznesore, e cila është e gatshme. Depo e përbashkët ndihmon në përmirësimin e përvojës së bashkëveprimit brenda ekipeve: kur përdoren infrastrukturat shumë të ngjashme të brendshme, është më e lehtë të përfshihesh në procesin e zhvillimit të një ekipi tjetër dhe të shkëmbeni ekspertizën.

Dhe pse na nevojitet Open Source?

Ne duam të tregojmë pjekurinë e ekspertizës dhe të marrim reagime të cilësisë: një person që është jashtë bankës do të mund të sjellë diçka nga vetja. Gjithashtu, na intereson zhvillimi i praktikave të punës me mikroshërbje dhe DDD në .NET në industri, ndoshta dikush do të dëshirojë të marrë disa pjesë të kuadrit për vete.

Pra, ViennaNET

Tani le të shohim gjithçka në detaje. Kodi burimor i plotë është vendosur këtu.

ViennaNET.WebApi.*

Ky grup bibliotekash përbëhet nga "rrënja" ViennaNET.WebApi, e cila përmban klasën ndërtuese për shërbimin CompanyHostBuilder, dhe një grup konfiguratorësh ViennaNET.WebApi.Configurators.*, çdo njëri prej të cilëve lejon të shtohet dhe konfigurohet një funksionalitet në shërbimin e krijuar. Mes konfiguratorëve mund të gjeni lidhjen e logimit, diagnostikës, llojin e autentikimit dhe autorizimit, swagger-ën etj.

ViennaNET.WebApi.Runners.* përmban ndërtuesit e shërbimeve të konfiguruar paraprakisht. Këto paketa lejojnë që të mos duhet të kujtojmë çdo herë, ndërsa krijojmë një shërbim të ri, se cilat konfiguratorë duhet të lidhen. Në të njëjtën kohë ato nuk kufizojnë aspak funksionalitetin e ndërtuesve të shërbimeve.

ViennaNET.Mediator.*

Biblioteka që lejojnë krijimin e një shtegu të brendshëm për komandat dhe kërkesat brenda shërbimit. Ky qasje lejon reduktimin e numrit të DI-injeksioneve në një të vetme, për shembull, në kontrollet. Falë kësaj, mund të shtohen dekoratorë të ndryshëm në kërkesa, gjë që unifikon përpunimin e tyre dhe redukton numrin e kodit.

ViennaNET.Validation

Këtu është një ndërtim që përmban një grup klasash për krijimin e rregullave dhe sekuencave të validimit. Shumë e leverdishme për implementimin e validimit domenal, pasi lejon përshkrimin e çdo kushti të biznesit si një rregull të thjeshtë dhe të veçantë.

ViennaNET.Redis

Bibliotekë me mbështjellje për punë të lehtë me Redis si një cache në memories.

ViennaNET.Specifications

Këtu është një ndërtim që përmban klasa që implementojnë modelin 'Specifikation'.

Kjo nuk është gjithçka që kemi në paketën tonë. Të tjera mund të shihen në depozitën e GitHub. Shpejt pritet që bibliotekat tona për punën me bazat e të dhënave të dalin në OpenSource.

Faleminderit për vëmendjen, presim komentet dhe pull request-et tuaja.

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster