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

Përshëndetje të gjithëve!

Ne jemi një komunitet i zhvilluesve .NET në Raiffeisen Bank dhe dëshirojmë të flasim për një grup bibliotekash infrastrukturore në .NET Core për krijimin e shpejtë të mikroserviseve me një ekosistem të vetëm. E kemi bërë atë open source!

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

Pak histori

Kur dikur kishim një projekt të madh monolitik, i cili gradualisht po shndërrohej në një grup mikroservisesh (për veçoritë e këtij procesi mund të lexoni në këto artikuj). Gjatë procesit, u përballëm me problem që, kur krijonim mikroservise të reja, shpesh na duhej të kopjonim zgjidhje të ndryshme infrastrukturore – siç janë konfigurimi i regjistrimit, puna me Baza të Dhënash, WCF etj. Ky projekt ishte punuar nga një ekip i vetëm, dhe të gjithë ishin mësuar me një qasje të caktuar për punën me infrastrukturën. Prandaj, ne e ndamë kodin e përbashkët në një depo të veçantë, bibliotekat e mbledhura i bëmë në paketa Nuget dhe i vendosëm në depo tonë të brendshme Nuget.

Koha kalonte, projekti po copëtohej, dhe shfaqej dëshira për të krijuar module të reja të pjesës frontale me një framework modern Js dhe për t'i lançuar ato në shfletues. Filluam të kalojmë nga WCF/SOAP në REST/HTTP, prandaj na duhej bibliotekë të re për lançimin e shpejtë të shërbimeve të bazuara në AspNet WebApi. Versioni i parë në .Net Framework 4.5 u realizua nga arkitekti ynë në një kohë të lirë, por ai tashmë nga kutia lejonte që me tri rreshta në Program.cs të lanconim një shërbim, i cili përmbante autorizimin (NTLM), regjistrimin, Swagger, IoC/DI të bazuar në Castle Windsor, klientët HTTP të konfiguruar, që kalonin të dhëna të ndryshme për sigurimin e regjistrimit të plotë në të gjithë projektin. Dhe e gjithë kjo mund të konfigurohej më tej në dosjen e konfigurimit të shërbimit.

Megjithatë, nuk ishte gjithçka pa probleme: kjo bibliotekë doli të ishte jashtëzakonisht e ngurtë për implementimin e moduleve të reja. Për shembull, nëse duheshin shtuar ndonjë middleware të veçantë, duhej të krijonim një nëpak dhe të trashëgonim nga klasa themelore që lançonte shërbimin, që ishte jashtëzakonisht e pamundur. Fatmirësisht, raste të tilla ishin mjaft të pakta.

Epoka e Docker dhe Kubernetes

Ka ardhur koha kur edhe ne u goditëm nga valë e Docker dhe Kubernetes, pas së cilës ne vumë vërejtjen: ishte një mundësi e shkëlqyer për të vazhduar me teknologjitë më tej, në .Net Core. Kështu që do të na nevojitej një infrastrukturë e re për të nisur shërbimet: një pjesë e 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 dëshironim të ripunonim funksionalitetin e lidhur me nisjen e shërbimeve në AspNet Core.

Hapi i parë ishte shqyrtimi i konceptit që do të eliminojë mangësinë kryesore të versionit të mëparshëm: mungesa e fleksibilitetit. Prandaj, u vendos që të bëhet e gjithë sistemi i bibliotekave sa më të pavarura dhe modulare dhe të grumbullohen shërbimet e nevojshme si ndërtues.

Qëllimi kryesor është krijimi i një qasje të unifikuar që përshkruan se si të bashkëveprohet me bazat e të dhënave, autobusët dhe shërbimet e tjera. Ne u përpoqëm që integrimet të ishin të shpejta dhe pa dhembje, në mënyrë që zhvilluesit të mund të përqendrohen në shkrimin e logjikës biznesore dhe jo të infrastrukturës - ajo tashmë është e gatshme. Repository i përgjithshëm ndihmon në përmirësimin e përvojës së bashkëveprimit brenda grupeve: 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ë ndash ekspertizën.

Dhe përse na duhet Open Source?

Ne duam të tregojmë pjekurinë e ekspertizës dhe të marrim reagime cilësore: një person që ndodhet jashtë bankës, do të mund të sjellë diçka nga vetja. Po ashtu, na intereson zhvillimi i praktikave të punës me mikroshërbimet dhe DDD në .NET në industri, ndoshta dikush do të dëshirojë të marrë disa pjesë të kornizës për veten.

Pikërisht, ViennaNET

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

ViennaNET.WebApi.*

Ky set bibliotekash konsiston në "rrënjën" ViennaNET.WebApi, që përmban një klasë ndërtuese për shërbimin CompanyHostBuilder, dhe një grup konfiguruesish ViennaNET.WebApi.Configurators.*, secili prej të cilëve lejon shtimin dhe konfigurimin e ndonjë funksionaliteti në shërbimin në krijim. Në mesin e konfiguruesve mund të gjeni lidhje të logjistikës, diagnostikës, llojit të identifikimit dhe autorizimit, swagger-it etj.

ViennaNET.WebApi.Runners.* përmban ndërtues shërbimesh të parakonfiguruar. Këto paketa lejojnë që të mos përmendni çdo herë, kur krijoni një shërbim të ri, cilat konfigurues duhet të lidhen. Ato nuk kufizojnë askund funksionalitetin e ndërtuesit të shërbimeve.

ViennaNET.Mediator.*

Biblioteka që lejojnë krijimin e një autobusi të brendshëm për komanda dhe kërkesa brenda shërbimit. Ky qasje lejon të zvogëloni numrin e injeksioneve DI në një, për shembull, në kontrollet. Kështu, mund të shtoni dekoratorë të ndryshëm për kërkesat, që unifikon trajtimin e tyre dhe zvogëlon sasinë e kodit.

ViennaNET.Validation

Paketa që përmban një grup klasash për krijimin e rregullave dhe sekuencave të validimit. Shumë e përshtatshme për realizimin e validimit vendas, pasi lejon përshkrimin e çdo kushti biznesi si një rregull të thjeshtë dhe të veçantë.

ViennaNET.Redis

Bibliotekë me mbështjellës për punë të lehtë me Redis si një cache në memorie.

ViennaNET.Specifications

Paketa që përmban klasat që realizojnë modelin "Specifikimi".

Kjo nuk është gjithçka që kemi në grupin tonë. Mund të shikoni pjesën tjetër në depozitarin tonë në GitHub. Shpejt planifikohet dalja në OpenSource e bibliotekave tona për punë me bazat e të dhënave.

Faleminderit për vëmendjen, presim komentet dhe kërkesat tuaja për bashkëpunim.

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster