ViennaNET: një grup bibliotekash për backend

Përshëndetje të gjithëve!

Ne jemi një komunitet zhvilluesish .NET në Raiffeisenbank dhe duam të flasim për një sërë bibliotekash infrastrukturore të bazuara në .NET Core për krijimin e shpejtë të mikroshërbimeve me një ekosistem të vetëm. Ata e sollën atë në Open Source!

ViennaNET: një grup bibliotekash për backend

Pak histori

Njëherë e një kohë kishim një projekt të madh monolit, i cili gradualisht u shndërrua në një grup mikroshërbimesh (mund të lexoni për veçoritë e këtij procesi në Ky artikull). Gjatë procesit, ne hasëm problemin që gjatë krijimit të mikroshërbimeve të reja, shpesh na duhej të kopjonim zgjidhje të ndryshme infrastrukturore - të tilla si vendosja e regjistrimit, puna me një bazë të dhënash, WCF, etj. Një ekip punoi në këtë projekt dhe të gjithë tashmë ishin mësuar me një qasje të vendosur për të punuar me infrastrukturën. Prandaj, ne e ndamë kodin e përbashkët në një depo të veçantë, i mbështjellëm bibliotekat e mbledhura në paketat Nuget dhe i vendosëm në depon tonë të brendshme të Nuget.

Koha kaloi, projekti gradualisht u fragmentua dhe u shfaq një dëshirë për të krijuar module të reja nga ana e klientit në një kornizë moderne JS dhe për t'i ekzekutuar ato në shfletues. Ne filluam të lëviznim nga WCF/SOAP në REST/HTTP, kështu që na duheshin biblioteka të reja për të nisur shpejt shërbimet e bazuara në AspNet WebApi. Versioni i parë në .Net Framework 4.5 u bë nga arkitekti ynë pothuajse në gjunjë në kohën e tij të lirë, por jashtë kutisë bëri të mundur nisjen e një shërbimi me tre rreshta në Program.cs që përmbante autorizim (NTLM). logging, Swagger, IoC/DI bazuar në Castle Windsor, klientë të personalizuar HTTP që përcjellin tituj të ndryshëm për të ofruar regjistrime nga fundi në fund gjatë gjithë projektit. Dhe e gjithë kjo gjë mund të konfigurohet më tej drejtpërdrejt në skedarin e konfigurimit të shërbimit.

Sidoqoftë, jo gjithçka ishte e qetë: kjo bibliotekë doli të ishte jashtëzakonisht jofleksibile për sa i përket prezantimit të moduleve të reja. Për shembull, nëse do t'ju duhej të shtonit një program të mesëm të veçantë, duhet të krijoni një asamble të re dhe të trashëgoni nga klasa bazë që drejton shërbimin, gjë që ishte jashtëzakonisht e papërshtatshme. Fatmirësisht nuk kishte shumë raste të tilla.

Epoka e Docker dhe Kubernetes

Ka ardhur koha kur vala e Docker dhe Kubernetes mbërriti tek ne, të cilat ne i ndoqëm nga afër: në fund të fundit, ishte një shans i shkëlqyeshëm për të filluar ecjen më tej përgjatë teknologjive, në .Net Core. Kjo do të thotë se do të na duhet një infrastrukturë e re për të ekzekutuar shërbimet: disa biblioteka kanë migruar nga .Net Framework në .Net Standard dhe .Net Core praktikisht pa ndryshime, disa me përmirësime të vogla. Por mbi të gjitha doja të ripunoja funksionalitetin që lidhet me nisjen e shërbimeve në AspNet Core.

Gjëja e parë që ne konsideruam ishte një koncept që do të hiqte pengesën kryesore të versionit të mëparshëm: mungesën e fleksibilitetit. Prandaj, u vendos që i gjithë sistemi i bibliotekës të bëhet sa më i pavarur dhe modular dhe të mblidhen shërbimet e nevojshme për funksionimin si konstruktor.

Qëllimi kryesor është krijimi i një qasjeje të unifikuar që përshkruan se si të ndërveprohet me bazat e të dhënave, autobusët dhe shërbimet e tjera. Ne u përpoqëm t'i bënim integrimet të shpejta dhe pa dhimbje, dhe zhvilluesit mund të përqendroheshin në shkrimin e logjikës së biznesit dhe jo në infrastrukturë - ajo tashmë është gati. Një depo e përbashkët ndihmon në përmirësimin e përvojës së ndërveprimit brenda ekipeve: kur përdoren infrastruktura të brendshme shumë të ngjashme, është më e lehtë të bashkohesh në procesin e zhvillimit të një ekipi tjetër dhe të shkëmbesh ekspertizën.

Dhe pse na duhet Open Source?

Ne duam të tregojmë pjekurinë e ekspertizës sonë dhe të marrim komente me cilësi të lartë: një person jashtë bankës do të jetë në gjendje të sjellë diçka nga vetja. Ne jemi gjithashtu të interesuar në zhvillimin e praktikave për të punuar me mikroshërbime dhe DDD në .NET në industri; ndoshta dikush do të dëshirojë të marrë përsipër pjesë të caktuara të kornizës.

Në fakt, ViennaNET

Tani le të hedhim një vështrim më të afërt. Kodi burimor i plotë është postuar këtu.

ViennaNET.WebApi.*

Ky grup bibliotekash përbëhet nga "rrënja" ViennaNET.WebApi, që përmban klasën e ndërtuesit për shërbimin CompanyHostBuilder, dhe një grup konfiguruesish ViennaNET.WebApi.Configurators.*, secila prej të cilëve ju lejon të shtoni dhe konfiguroni disa funksione në të krijuarit shërbimi. Midis konfiguruesve mund të gjeni lidhje për logim, diagnostifikim, autentifikimin dhe llojet e autorizimit, swagger, etj.

ViennaNET.WebApi.Runners.* gjithashtu përmban ndërtues të shërbimeve të para-konfiguruara. Këto paketa ju lejojnë të mos mbani mend sa herë që krijoni një shërbim të ri të cilin konfiguruesit duhet të lidhen. Sidoqoftë, ato nuk kufizojnë në asnjë mënyrë funksionalitetin e ndërtuesit të shërbimit.

ViennaNET.Mediator.*

Bibliotekat që ju lejojnë të krijoni një autobus të brendshëm ndërmjetës për komandat dhe kërkesat brenda një shërbimi. Kjo qasje ju lejon të zvogëloni numrin e injeksioneve DI në një, për shembull, në kontrollorë. Për shkak të kësaj, ju mund të shtoni dekorues të ndryshëm në kërkesat, gjë që unifikon përpunimin e tyre dhe zvogëlon sasinë e kodit.

VjenaNET.Vleresimi

Një asamble që përmban një grup klasash për krijimin e rregullave të vërtetimit dhe sekuencave prej tyre. Është shumë i përshtatshëm për zbatimin e vlefshmërisë së domenit, pasi ju lejon të përshkruani çdo kusht biznesi në formën e një rregulli të thjeshtë dhe të veçantë.

VjenëNET.Redis

Një bibliotekë me mbështjellës për punë të përshtatshme me Redis si një cache në memorie.

ViennaNET.Specifikimet

Një asamble që përmban klasa që zbatojnë modelin e Specifikimit.

Kjo nuk është gjithçka në grupin tonë. Ju mund të shihni pjesën tjetër në depon e GitHub. Ne po planifikojmë të lëshojmë së shpejti bibliotekat tona për të punuar me bazat e të dhënave në OpenSource.

Faleminderit për vëmendjen tuaj, ne mezi presim komentet dhe kërkesat tuaja.

Burimi: www.habr.com

Shto një koment