ViennaNET: aizmugursistēmas bibliotēku komplekts

Sveiki visiem!

Mēs esam Raiffeisenbank .NET izstrādātāju kopiena, un mēs vēlamies runāt par infrastruktūras bibliotēku kopu, kuras pamatā ir .NET Core, lai ātri izveidotu mikropakalpojumus ar vienu ekosistēmu. Viņi to atveda uz atvērtā pirmkoda versiju!

ViennaNET: aizmugursistēmas bibliotēku komplekts

Nedaudz vēstures

Kādreiz mums bija liels monolÄ«ts projekts, kas pamazām pārtapa par mikropakalpojumu komplektu (par Ŕī procesa iezÄ«mēm var lasÄ«t Å is raksts). Å ajā procesā saskārāmies ar problēmu, ka, veidojot jaunus mikropakalpojumus, bieži nācās kopēt dažādus infrastruktÅ«ras risinājumus ā€“ piemēram, reÄ£istrÄ“Å”anas iestatÄ«Å”ana, darbs ar datu bāzi, WCF u.c. Viena komanda strādāja pie Ŕī projekta, un visi jau bija pieraduÅ”i pie noteiktas pieejas darbam ar infrastruktÅ«ru. Tāpēc mēs atdalÄ«jām kopējo kodu atseviŔķā repozitorijā, iesaiņojām savāktās bibliotēkas Nuget pakotnēs un ievietojām mÅ«su iekŔējā Nuget repozitorijā.

Gāja laiks, projekts pamazām sadrumstalojās, un radās vēlme izveidot jaunus klienta puses moduļus uz moderna JS ietvara un palaist tos pārlÅ«kprogrammā. Mēs sākām pāriet no WCF/SOAP uz REST/HTTP, tāpēc mums bija vajadzÄ«gas jaunas bibliotēkas, lai ātri palaistu pakalpojumus, kuru pamatā ir AspNet WebApi. Pirmo versiju .Net Framework 4.5 mÅ«su arhitekts brÄ«vajā laikā izveidoja gandrÄ«z uz ceļiem, taču tā ļāva palaist pakalpojumu ar trÄ«s rindiņām programmā Program.cs, kas satur autorizāciju (NTLM), reÄ£istrÄ“Å”ana, Swagger, IoC/DI, pamatojoties uz Castle Windsor, pielāgoti HTTP klienti, kas pārsÅ«ta dažādas galvenes, lai nodroÅ”inātu pilnÄ«gu reÄ£istrÄ“Å”anu visā projektā. Un visu Å”o lietu var tālāk konfigurēt tieÅ”i pakalpojuma konfigurācijas failā.

Tomēr ne viss bija gludi: Ŕī bibliotēka izrādÄ«jās ārkārtÄ«gi neelastÄ«ga jaunu moduļu ievieÅ”anas ziņā. Piemēram, ja jums bija jāpievieno Ä«paÅ”a starpprogrammatÅ«ra, jums bija jāizveido jauns komplekts un jāpārmanto no bāzes klases, kurā darbojas pakalpojums, kas bija ārkārtÄ«gi neērti. Par laimi, Ŕādu gadÄ«jumu nebija Ä«paÅ”i daudz.

Dokera un Kubernetes laikmets

Ir pienācis laiks, kad mÅ«s sasniedza Docker un Kubernetes vilnis, ko mēs uzmanÄ«gi vērojām: galu galā tā bija lieliska iespēja sākt virzÄ«ties tālāk pa tehnoloÄ£ijām .Net Core. Tas nozÄ«mē, ka pakalpojumu darbināŔanai mums bÅ«s nepiecieÅ”ama jauna infrastruktÅ«ra: dažas bibliotēkas ir migrējuÅ”as no .Net Framework uz .Net Standard un .Net Core praktiski bez izmaiņām, dažas ar nelieliem uzlabojumiem. Bet galvenokārt es gribēju pārveidot funkcionalitāti, kas saistÄ«ta ar pakalpojumu palaiÅ”anu AspNet Core.

Pirmā lieta, ko mēs apsvērām, bija koncepcija, kas novērstu iepriekŔējās versijas galveno trÅ«kumu: elastÄ«bas trÅ«kumu. Tāpēc tika nolemts visu bibliotēkas sistēmu padarÄ«t pēc iespējas neatkarÄ«gāku un modulārāku un funkcionalitātei nepiecieÅ”amos pakalpojumus komplektēt kā konstruktoru.

Galvenais mērÄ·is ir izveidot vienotu pieeju, kas apraksta, kā mijiedarboties ar datu bāzēm, autobusiem un citiem pakalpojumiem. Mēs centāmies padarÄ«t integrāciju ātru un nesāpÄ«gu, un izstrādātāji varēja koncentrēties uz biznesa loÄ£ikas rakstÄ«Å”anu, nevis infrastruktÅ«ru - tā jau ir gatava. KopÄ«gs repozitorijs palÄ«dz uzlabot mijiedarbÄ«bas pieredzi komandās: ja tiek izmantota ļoti lÄ«dzÄ«ga iekŔējā infrastruktÅ«ra, ir vieglāk pievienoties citas komandas izstrādes procesam un apmainÄ«ties ar zināŔanām.

Un kāpēc mums ir nepiecieÅ”ams atvērtais avots?

Mēs vēlamies parādÄ«t savas pieredzes briedumu un saņemt kvalitatÄ«vu atgriezenisko saiti: cilvēks ārpus bankas varēs kaut ko atnest no sevis. MÅ«s interesē arÄ« prakses attÄ«stÄ«ba darbam ar mikropakalpojumiem un DDD uz .NET Å”ajā nozarē, iespējams, kāds vēlēsies pārņemt atseviŔķas ietvara daļas.

Patiesībā ViennaNET

Tagad paskatīsimies tuvāk. Pilns pirmkods ir ievietots Ŕeit.

ViennaNET.WebApi.*

Å is bibliotēku komplekts sastāv no ā€œsaknesā€ ViennaNET.WebApi, kas satur CompanyHostBuilder pakalpojuma veidotāju klasi, un konfiguratoru komplektu ViennaNET.WebApi.Configurators.*, no kuriem katrs ļauj pievienot un konfigurēt kādu funkcionalitāti izveidotajam. apkalpoÅ”ana. Starp konfiguratoriem varat atrast savienojumus reÄ£istrÄ“Å”anai, diagnostikai, autentifikācijas un autorizācijas veidiem, swagger utt.

ViennaNET.WebApi.Runners.* satur arÄ« iepriekÅ” konfigurētus pakalpojumu veidotājus. Å Ä«s pakotnes ļauj neatcerēties katru reizi, kad veidojat jaunu pakalpojumu, kuri konfiguratori ir jāpievieno. Tomēr tie nekādā veidā neierobežo pakalpojumu veidotāja funkcionalitāti.

ViennaNET.Mediator.*

Bibliotēkas, kas ļauj izveidot iekŔēju starpnieku kopni komandām un pieprasÄ«jumiem pakalpojumā. Å Ä« pieeja ļauj samazināt DI injekciju skaitu lÄ«dz vienai, piemēram, kontrolieros. Pateicoties tam, pieprasÄ«jumiem var pievienot dažādus dekoratorus, kas vieno to apstrādi un samazina koda daudzumu.

ViennaNET.Validācija

Montāža, kas satur klaÅ”u kopu, lai izveidotu validācijas noteikumus un secÄ«bas no tām. Tas ir ļoti ērti domēna validācijas ievieÅ”anai, jo ļauj aprakstÄ«t katru biznesa nosacÄ«jumu vienkārÅ”a un atseviŔķa noteikuma veidā.

ViennaNET.Rēdis

Bibliotēka ar iesaiņojumiem ērtam darbam ar Redis kā keÅ”atmiņu atmiņā.

ViennaNET.Specifikācijas

Asambleja, kurā ir klases, kas īsteno specifikācijas modeli.

Tas nav viss, kas ir mūsu komplektā. Pārējo var redzēt GitHub repozitorijā. Mēs plānojam drīzumā atbrīvot mūsu bibliotēkas darbam ar datu bāzēm uz OpenSource.

Paldies par uzmanību, gaidīsim jūsu komentārus un pieprasījumus.

Avots: www.habr.com

Pievieno komentāru