ViennaNET: sett ta' libreriji għall-backend

Hello kulħadd!

Aħna komunità ta’ żviluppaturi .NET f’Raiffeisenbank u rridu nitkellmu dwar sett ta’ libreriji infrastrutturali bbażati fuq .NET Core biex noħolqu malajr mikroservizzi b’ekosistema waħda. Huma ġabuha għal Open Source!

ViennaNET: sett ta' libreriji għall-backend

Ftit storja

Darba darba kellna proġett monolitiku kbir, li gradwalment inbidel f’sett ta’ mikroservizzi (tista’ taqra dwar il-karatteristiċi ta’ dan il-proċess f’ Dan l-artikolu). Fil-proċess, iltqajna mal-problema li meta noħolqu mikroservizzi ġodda, ħafna drabi kellna nikkopjaw diversi soluzzjonijiet infrastrutturali - bħall-istabbiliment ta 'logging, ħidma ma' database, WCF, eċċ. Tim wieħed ħadem fuq dan il-proġett, u kulħadd kien diġà mdorri b'xi approċċ stabbilit biex jaħdem mal-infrastruttura. Għalhekk, isseparajna l-kodiċi komuni f'repożitorju separat, imgeżwer il-libreriji miġbura f'pakketti Nuget u poġġiejna fir-repożitorju intern Nuget tagħna.

Iż-żmien għadda, il-proġett frammentat gradwalment, u kien hemm ix-xewqa li jinħolqu moduli ġodda min-naħa tal-klijent fuq qafas JS modern u jmexxuhom fil-browser. Bdejna nimxu minn WCF/SOAP għal REST/HTTP, għalhekk kellna bżonn libreriji ġodda biex inniedu malajr servizzi bbażati fuq AspNet WebApi. L-ewwel verżjoni fuq il-.Net Framework 4.5 saret mill-perit tagħna kważi għarkupptejh fil-ħin liberu tiegħu, iżda barra mill-kaxxa għamlitha possibbli li jitnieda servizz bi tliet linji fi Program.cs li kien fih awtorizzazzjoni (NTLM), illoggjar, Swagger, IoC/DI fuq ibbażat fuq Castle Windsor, klijenti HTTP personalizzati li jgħaddu diversi headers biex jipprovdu logging minn tarf sa tarf matul il-proġett kollu. U din il-ħaġa sħiħa tista 'tiġi kkonfigurata aktar direttament fil-fajl tal-konfigurazzjoni tas-servizz.

Madankollu, mhux kollox kien bla xkiel: din il-librerija rriżulta li kienet estremament inflessibbli f'termini ta 'introduzzjoni ta' moduli ġodda. Pereżempju, jekk għandek bżonn iżżid xi middleware speċjali, kellek toħloq assemblaġġ ġdid u tirret mill-klassi bażi li tmexxi s-servizz, li kien estremament inkonvenjenti. Fortunatament, ma kienx hemm ħafna każijiet bħal dawn.

L-era ta 'Docker u Kubernetes

Wasal iż-żmien meta waslet magħna l-mewġa ta 'Docker u Kubernetes, li rajna mill-qrib: wara kollox, kien ċans kbir li nibdew nimxu aktar tul it-teknoloġiji, f'.Net Core. Dan ifisser li se jkollna bżonn infrastruttura ġdida biex inħaddmu s-servizzi: xi libreriji emigraw mill-.Net Framework għal .Net Standard u .Net Core prattikament mingħajr bidliet, xi wħud b'titjib żgħir. Imma fuq kollox ridt li naħdem mill-ġdid il-funzjonalità assoċjata mat-tnedija tas-servizzi fuq AspNet Core.

L-ewwel ħaġa li ikkunsidrajna kienet kunċett li jneħħi l-iżvantaġġ ewlieni tal-verżjoni preċedenti: in-nuqqas ta’ flessibilità. Għalhekk, ġie deċiż li s-sistema kollha tal-libreriji ssir kemm jista’ jkun indipendenti u modulari u tiġbor is-servizzi meħtieġa għall-funzjonalità bħala kostruttur.

L-għan ewlieni huwa li jinħoloq approċċ unifikat li jiddeskrivi kif jinteraġixxu ma 'databases, karozzi tal-linja u servizzi oħra. Ippruvajna nagħmlu l-integrazzjonijiet malajr u mingħajr tbatija, u l-iżviluppaturi setgħu jikkonċentraw fuq il-kitba tal-loġika tan-negozju aktar milli l-infrastruttura - diġà hija lesta. Repożitorju komuni jgħin biex titjieb l-esperjenza tal-interazzjoni fi ħdan it-timijiet: meta jintużaw infrastrutturi interni simili ħafna, ikun aktar faċli li tingħaqad mal-proċess ta’ żvilupp ta’ tim ieħor u tiskambja l-għarfien espert.

U għaliex għandna bżonn Open Source?

Irridu nuru l-maturità tal-kompetenza tagħna u nirċievu feedback ta 'kwalità għolja: persuna barra l-bank tkun tista' ġġib xi ħaġa minnha nfisha. Aħna huma interessati wkoll fl-iżvilupp ta 'prattiċi għall-ħidma ma' mikroservizzi u DDD fuq .NET fl-industrija; forsi xi ħadd ikun irid jieħu f'idejh ċerti partijiet tal-qafas.

Attwalment, ViennaNET

Issa ejja nagħtu ħarsa aktar mill-qrib. Il-kodiċi tas-sors sħiħ huwa mibgħut hawn.

ViennaNET.WebApi.*

Dan is-sett ta’ libreriji jikkonsisti mill-“għerq” ViennaNET.WebApi, li fih il-klassi tal-bennej għas-servizz CompanyHostBuilder, u sett ta’ konfiguraturi ViennaNET.WebApi.Configurators.*, li kull wieħed minnhom jippermettilek li żżid u tikkonfigura xi funzjonalità mal-maħluq. servizz. Fost il-konfiguraturi tista 'ssib konnessjonijiet għall-illoggjar, dijanjostiċi, tipi ta' awtentikazzjoni u awtorizzazzjoni, swagger, eċċ.

ViennaNET.WebApi.Runners.* fih ukoll bennejja tas-servizz konfigurati minn qabel. Dawn il-pakketti jippermettulek li ma tiftakarx kull darba li toħloq servizz ġdid liema konfiguraturi jeħtieġ li jiġu konnessi. Madankollu, bl-ebda mod ma jillimitaw il-funzjonalità tal-bennej tas-servizz.

ViennaNET.Medjatur.*

Libreriji li jippermettulek toħloq xarabank intermedjarju intern għall-kmandi u t-talbiet fi ħdan servizz. Dan l-approċċ jippermettilek tnaqqas in-numru ta 'injezzjonijiet DI għal waħda, pereżempju, fil-kontrolluri. Minħabba dan, tista 'żżid diversi dekoraturi mat-talbiet, li jgħaqqad l-ipproċessar tagħhom u jnaqqas l-ammont ta' kodiċi.

ViennaNET.Validazzjoni

Assemblaġġ li fih sett ta' klassijiet għall-ħolqien ta' regoli ta' validazzjoni u sekwenzi minnhom. Huwa konvenjenti ħafna għall-implimentazzjoni tal-validazzjoni tad-dominju, peress li jippermettilek tiddeskrivi kull kundizzjoni tan-negozju fil-forma ta 'regola sempliċi u separata.

ViennaNET.Redis

Librerija b'tgeżwir għal xogħol konvenjenti ma' Redis bħala cache fil-memorja.

ViennaNET.Speċifikazzjonijiet

Assemblaġġ li fih klassijiet li jimplimentaw il-mudell tal-Ispeċifikazzjoni.

Dan mhux dak kollu li hemm fis-sett tagħna. Tista 'tara l-bqija fir-repożitorju GitHub. Qed nippjanaw li dalwaqt nirrilaxxaw il-libreriji tagħna biex naħdmu mad-databases lil OpenSource.

Grazzi għall-attenzjoni tiegħek, nistennew bil-ħerqa l-kummenti tiegħek u t-talbiet tiegħek.

Sors: www.habr.com

Żid kumment