ViennaNET: bibliotekų rinkinys užpakalinei programai

Sveiki visi!

Esame „Raiffeisenbank“ .NET kūrėjų bendruomenė ir norime pakalbėti apie infrastruktūros bibliotekų rinkinį, pagrįstą „.NET Core“, kad būtų galima greitai sukurti mikropaslaugas naudojant vieną ekosistemą. Jie atnešė jį į atvirąjį kodą!

ViennaNET: bibliotekų rinkinys užpakalinei programai

Truputis istorijos

Kažkada turėjome didelį monolitinį projektą, kuris palaipsniui virto mikropaslaugų rinkiniu (apie šio proceso ypatybes galite paskaityti Šis straipsnis). Proceso metu susidūrėme su problema, kad kuriant naujas mikropaslaugas dažnai tekdavo kopijuoti įvairius infrastruktūros sprendimus – tokius kaip registravimo nustatymas, darbas su duomenų baze, WCF ir kt. Prie šio projekto dirbo viena komanda, ir visi jau buvo pripratę prie nusistovėjusio požiūrio į darbą su infrastruktūra. Todėl bendrąjį kodą išskyrėme į atskirą saugyklą, surinktas bibliotekas supakavome į „Nuget“ paketus ir patalpinome į savo vidinę „Nuget“ saugyklą.

Laikas bėgo, projektas pamažu fragmentavosi, atsirado noras sukurti naujus kliento modulius ant modernios JS sistemos ir paleisti juos naršyklėje. Pradėjome pereiti nuo WCF/SOAP prie REST/HTTP, todėl mums reikėjo naujų bibliotekų, kad galėtume greitai paleisti paslaugas, pagrįstas AspNet WebApi. Pirmąją „.Net Framework 4.5“ versiją mūsų architektas laisvalaikiu sukūrė beveik klūpėdamas, tačiau iš dėžutės buvo galima paleisti paslaugą su trimis Program.cs eilutėmis, kuriose buvo suteiktas leidimas (NTLM), registravimas, Swagger, IoC / DI, pagrįsta Castle Windsor, pritaikyti HTTP klientai, kurie persiunčia įvairias antraštes, kad visame projekte būtų galima registruoti nuo galo iki galo. Ir visa tai galima toliau konfigūruoti tiesiogiai paslaugos konfigūracijos faile.

Tačiau ne viskas klostėsi sklandžiai: ši biblioteka pasirodė itin nelanksti diegiant naujus modulius. Pavyzdžiui, jei reikėjo pridėti specialią tarpinę programinę įrangą, turėjote sukurti naują rinkinį ir paveldėti iš bazinės klasės, kuri vykdo paslaugą, o tai buvo labai nepatogu. Laimei, tokių atvejų nebuvo labai daug.

Docker ir Kubernetes era

Atėjo laikas, kai mus pasiekė Docker ir Kubernetes banga, kurią akylai stebėjome: juk tai buvo puiki galimybė pradėti judėti toliau technologijomis, .Net Core. Tai reiškia, kad paslaugoms vykdyti reikės naujos infrastruktūros: kai kurios bibliotekos perėjo iš .Net Framework į .Net Standard ir .Net Core praktiškai be pakeitimų, kai kurios su nedideliais patobulinimais. Bet labiausiai norėjau pertvarkyti funkcijas, susijusias su paslaugų paleidimu AspNet Core.

Pirmas dalykas, kurį svarstėme, buvo koncepcija, kuri pašalintų pagrindinį ankstesnės versijos trūkumą: lankstumo trūkumą. Todėl buvo nuspręsta visą bibliotekos sistemą padaryti kuo savarankiškesnę ir modulinę bei surinkti funkcionalumui reikalingas paslaugas kaip konstruktorių.

Pagrindinis tikslas – sukurti vieningą požiūrį, aprašantį, kaip bendrauti su duomenų bazėmis, autobusais ir kitomis paslaugomis. Stengėmės, kad integracijos būtų greitos ir neskausmingos, o kūrėjai galėjo susikoncentruoti ties verslo logikos, o ne infrastruktūros rašymu – ji jau paruošta. Bendra saugykla padeda pagerinti sąveikos patirtį komandose: kai naudojamos labai panašios vidinės infrastruktūros, lengviau įsijungti į kitos komandos kūrimo procesą ir keistis patirtimi.

Ir kodėl mums reikia atvirojo kodo?

Norime parodyti savo kompetencijos brandą ir gauti kokybišką grįžtamąjį ryšį: žmogus už banko ribų galės kažką atsinešti iš savęs. Mus taip pat domina darbo su mikroservisais ir DDD .NET praktikos plėtra pramonėje; galbūt kas nors norės perimti tam tikras sistemos dalis.

Tiesą sakant, ViennaNET

Dabar pažiūrėkime atidžiau. Visas šaltinio kodas paskelbtas čia.

ViennaNET.WebApi.*

Šį bibliotekų rinkinį sudaro „šakninė“ ViennaNET.WebApi, kurioje yra „CompanyHostBuilder“ paslaugos kūrėjo klasė, ir konfigūratorių rinkinys ViennaNET.WebApi.Configurators.*, kurių kiekvienas leidžia pridėti ir sukonfigūruoti tam tikras sukurtas funkcijas. paslauga. Tarp konfigūratorių galite rasti registravimo, diagnostikos, autentifikavimo ir autorizacijos tipų jungtis, swagger ir kt.

ViennaNET.WebApi.Runners.* taip pat yra iš anksto sukonfigūruotų paslaugų kūrėjų. Šie paketai leidžia neprisiminti kiekvieną kartą, kai kuriate naują paslaugą, kurias konfigūratorius reikia prijungti. Tačiau jie niekaip neriboja paslaugų kūrėjo funkcionalumo.

ViennaNET.Mediator.*

Bibliotekos, leidžiančios sukurti vidinę tarpinę magistralę komandoms ir užklausoms paslaugos viduje. Šis metodas leidžia sumažinti DI įpurškimų skaičių iki vieno, pavyzdžiui, valdikliuose. Dėl to prie užklausų galite pridėti įvairių dekoratorių, kurie suvienodina jų apdorojimą ir sumažina kodo kiekį.

ViennaNET.Patvirtinimas

Agregatas, kuriame yra klasių rinkinys, skirtas kurti patvirtinimo taisykles ir sekas iš jų. Tai labai patogu diegti domeno patvirtinimą, nes leidžia apibūdinti kiekvieną verslo sąlygą paprastos ir atskiros taisyklės forma.

ViennaNET.Redis

Biblioteka su įvyniokliais patogiam darbui su Redis kaip talpykla atmintyje.

ViennaNET. Specifikacijos

Agregatas, kuriame yra klasės, įgyvendinančios specifikacijos šabloną.

Tai dar ne viskas, kas yra mūsų rinkinyje. Likusią galite pamatyti „GitHub“ saugykloje. Netrukus planuojame savo bibliotekas, skirtas darbui su duomenų bazėmis, išleisti į „OpenSource“.

Dėkojame už dėmesį, laukiame jūsų komentarų ir užklausų.

Šaltinis: www.habr.com

Добавить комментарий