ViennaNET: backend-erako liburutegi multzo bat

Hola a todos!

Raiffeisenbankeko .NET garatzaileen komunitate bat gara eta .NET Core-n oinarritutako azpiegitura liburutegi multzo bati buruz hitz egin nahi dugu ekosistema bakar batekin mikrozerbitzuak azkar sortzeko. Kode irekira ekarri dute!

ViennaNET: backend-erako liburutegi multzo bat

Historia apur bat

Garai batean proiektu monolitiko handi bat genuen, pixkanaka mikrozerbitzu multzo batean bihurtu zena (prozesu honen ezaugarriak irakur ditzakezue Artikulu honetan). Prozesuan, mikrozerbitzu berriak sortzean, askotan, hainbat azpiegitura-soluzio kopiatu behar izaten genituen arazoa topatu genuen, esate baterako, erregistroa konfiguratzea, datu-base batekin lan egitea, WCF, etab. Talde batek lan egin zuen proiektu honetan, eta denak jada ohituta zeuden azpiegiturekin lan egiteko ezarritako ikuspegi batera. Hori dela eta, kode arrunta biltegi bereizi batean bereizi genuen, bildutako liburutegiak Nuget paketeetan bildu eta gure barneko Nuget biltegian jarri genituen.

Denbora pasa zen, proiektua pixkanaka zatikatu zen, eta JS esparru moderno batean bezeroaren alboko modulu berriak sortzeko eta arakatzailean exekutatzeko nahia zegoen. WCF/SOAPetik REST/HTTPra pasatzen hasi ginen, beraz, liburutegi berriak behar genituen AspNet WebApi-n oinarritutako zerbitzuak azkar abiarazteko. .Net Framework 4.5-en lehen bertsioa gure arkitektoak ia belauniko egin zuen bere denbora librean, baina kaxatik kanpo baimena (NTLM) zekarren Program.cs-en hiru lerro dituen zerbitzu bat martxan jartzea ahalbidetu zuen. erregistroa, Swagger, IoC/DI oinarritutako Castle Windsor-en oinarrituta, hainbat goiburu birbidaltzen dituzten HTTP bezero pertsonalizatuak proiektu osoan zehar amaierako erregistroa emateko. Eta hori guztia gehiago konfiguratu liteke zerbitzuaren konfigurazio fitxategian zuzenean.

Hala ere, dena ez zen leuna izan: liburutegi hau modulu berriak sartzeari dagokionez, oso malgugabea suertatu zen. Adibidez, middleware bereziren bat gehitu behar bazenuen, muntaketa berri bat sortu eta zerbitzua exekutatzen duen oinarrizko klasetik heredatu behar zen, eta hori oso deserosoa zen. Zorionez, ez ziren horrelako kasuak asko izan.

Docker eta Kubernetesen garaia

Iritsi da Docker eta Kubernetes-en olatua guregana heldu zenekoa, eta hori gertutik ikusi genuen: azken finean, aukera paregabea zen teknologietan aurrera egiten hasteko, .Net Core-n. Horrek esan nahi du azpiegitura berri bat beharko dugula zerbitzuak exekutatzeko: liburutegi batzuk .Net Framework-etik .Net Standard eta .Net Core-ra ia aldaketarik gabe migratu dira, batzuk hobekuntza txikiekin. Baina, batez ere, AspNet Core-n zerbitzuak abiaraztearekin lotutako funtzionalitateak berraztertu nahi nituen.

Kontuan hartu genuen lehenengo gauza aurreko bertsioaren eragozpen nagusia kenduko zuen kontzeptua izan zen: malgutasun falta. Hori dela eta, liburutegi-sistema osoa ahalik eta independenteena eta modularena egitea eta eraikitzaile gisa funtzionaltasunerako beharrezkoak diren zerbitzuak biltzea erabaki zen.

Helburu nagusia datu-baseekin, autobusekin eta bestelako zerbitzuekin nola elkarreragina deskribatzen duen ikuspegi bateratua sortzea da. Saiatu ginen integrazioak azkar eta minik gabe egiten, eta garatzaileek negozio-logika idaztean kontzentratu zitekeen azpiegiturak baino; prest dago jada. Biltegi komun batek taldeen arteko interakzio-esperientzia hobetzen laguntzen du: barne-azpiegitura oso antzekoak erabiltzen direnean, errazagoa da beste talde baten garapen-prozesuan bat egitea eta esperientzia trukatzea.

Eta zergatik behar dugu Open Source?

Gure espezializazioaren heldutasuna erakutsi eta kalitate handiko iritzia jaso nahi dugu: bankutik kanpoko pertsona batek berez zerbait ekarri ahal izango du. Gainera, industrian mikrozerbitzuekin eta DDDekin lan egiteko praktikak garatzea interesatzen zaigu; agian norbaitek markoaren zenbait atal hartu nahi izango ditu.

Egia esan, ViennaNET

Orain ikus dezagun hurbilagotik. Iturburu-kode osoa hemen argitaratzen da.

ViennaNET.WebApi.*

Liburutegi-multzo hau ViennaNET.WebApi "root"-ek osatzen dute, CompanyHostBuilder zerbitzurako eraikitzaile-klasea duena, eta ViennaNET.WebApi.Configurators.* konfiguratzaile-multzo batek, bakoitzak sortutakoari funtzionalitate batzuk gehitzeko eta konfiguratzeko aukera ematen baitu zerbitzua. Konfiguratzaileen artean erregistrorako konexioak, diagnostikoak, autentifikazio eta baimen motak, swagger eta abar aurki ditzakezu.

ViennaNET.WebApi.Runners.*-k aurrez konfiguratutako zerbitzu-sortzaileak ere baditu. Pakete hauei esker, zerbitzu berri bat sortzen duzun bakoitzean zein konfiguratzaileak konektatu behar diren ez gogoratzea ahalbidetzen dizu. Hala ere, ez dute inola ere mugatzen zerbitzu-sortzailearen funtzionaltasuna.

ViennaNET.Mediator.*

Zerbitzu baten barruan agindu eta eskaeren barne bitartekari bus bat sortzeko aukera ematen duten liburutegiak. Ikuspegi honek DI injekzio kopurua batera murrizteko aukera ematen du, adibidez, kontrolagailuetan. Hori dela eta, hainbat dekoratzaile gehi ditzakezu eskaerei, eta horrek prozesatzea bateratzen du eta kode kopurua murrizten du.

ViennaNET.Balioztatzea

Horietatik baliozkotzeko arauak eta sekuentziak sortzeko klase multzo bat duen muntaia. Oso erosoa da domeinuaren baliozkotzea ezartzeko, negozio-baldintza bakoitza arau sinple eta bereizi baten moduan deskribatzeko aukera ematen baitu.

ViennaNET.Redis

Liburutegi bat bilgarriak dituena Redis-ekin memoriako cache gisa lan egiteko.

ViennaNET.Zehaztapenak

Zehaztapen eredua inplementatzen duten klaseak dituen muntaia.

Hau ez da gure multzoan dagoen guztia. Gainerakoa ikus dezakezu GitHub biltegian. Datu-baseekin lan egiteko gure liburutegiak laster OpenSource-ra kaleratzeko asmoa dugu.

Eskerrik asko zure arretagatik, zure iruzkinak eta tira-eskaerak espero ditugu.

Iturria: www.habr.com

Gehitu iruzkin berria