ViennaNET: nabor knjižnic za zaledje

Pozdravljeni vsi!

Smo skupnost razvijalcev .NET pri Raiffeisenbank in želimo govoriti o nizu infrastrukturnih knjižnic, ki temeljijo na .NET Core za hitro ustvarjanje mikrostoritev z enim ekosistemom. Prenesli so ga na odprto kodo!

ViennaNET: nabor knjižnic za zaledje

Malo zgodovine

Nekoč smo imeli velik monoliten projekt, ki se je postopoma spremenil v nabor mikrostoritev (o značilnostih tega procesa lahko preberete v ta članek). Pri tem smo naleteli na težavo, da smo morali pri izdelavi novih mikrostoritev pogosto kopirati različne infrastrukturne rešitve – na primer nastavitev beleženja, delo z bazo podatkov, WCF itd. Na tem projektu je delala ena ekipa in vsi so bili že navajeni nekega ustaljenega pristopa k delu z infrastrukturo. Zato smo skupno kodo ločili v ločen repozitorij, zbrane knjižnice zavili v pakete Nuget in jih postavili v naš notranji repozitorij Nuget.

Čas je tekel, projekt se je postopoma drobil in pojavila se je želja po ustvarjanju novih modulov na strani odjemalca na sodobnem ogrodju JS in izvajanju v brskalniku. Začeli smo se premikati z WCF/SOAP na REST/HTTP, zato smo potrebovali nove knjižnice za hiter zagon storitev, ki temeljijo na AspNet WebApi. Prvo verzijo na ogrodju .Net Framework 4.5 je naš arhitekt izdelal skoraj na kolenih v prostem času, a je že iz škatle omogočila zagon storitve s tremi vrsticami v Program.cs, ki so vsebovale avtorizacijo (NTLM), beleženje, Swagger, IoC/DI na podlagi Castle Windsor, prilagojenih odjemalcev HTTP, ki posredujejo različne glave za zagotavljanje beleženja od konca do konca skozi celoten projekt. In to celotno stvar bi lahko dodatno konfigurirali neposredno v konfiguracijski datoteki storitve.

Vendar ni bilo vse gladko: ta knjižnica se je izkazala za izjemno neprilagodljivo v smislu uvajanja novih modulov. Na primer, če ste morali dodati posebno vmesno programsko opremo, ste morali ustvariti nov sklop in podedovati od osnovnega razreda, ki izvaja storitev, kar je bilo izjemno neprijetno. Na srečo takih primerov ni bilo veliko.

Obdobje Dockerja in Kubernetesa

Prišel je čas, ko nas je dosegel val Dockerja in Kubernetesa, ki smo ga pozorno spremljali: navsezadnje je bila to odlična priložnost, da se začnemo premikati naprej po tehnologijah, v .Net Core. To pomeni, da bomo potrebovali novo infrastrukturo za izvajanje storitev: nekatere knjižnice so se preselile iz .Net Framework v .Net Standard in .Net Core praktično brez sprememb, nekatere z manjšimi izboljšavami. Predvsem pa sem želel predelati funkcionalnost, povezano z zagonom storitev na AspNet Core.

Prva stvar, o kateri smo razmišljali, je bil koncept, ki bi odstranil glavno pomanjkljivost prejšnje različice: pomanjkanje prilagodljivosti. Zato smo se odločili, da celoten knjižnični sistem naredimo čim bolj neodvisen in modularen ter kot konstruktor zberemo storitve, potrebne za funkcionalnost.

Glavni cilj je ustvariti enoten pristop, ki opisuje, kako komunicirati z bazami podatkov, vodili in drugimi storitvami. Potrudili smo se, da so integracije hitre in neboleče, razvijalci pa so se lahko osredotočili na pisanje poslovne logike in ne na infrastrukturo – ta je že pripravljena. Skupni repozitorij pomaga izboljšati izkušnjo interakcije znotraj ekip: ko se uporabljajo zelo podobne notranje infrastrukture, se je lažje pridružiti razvojnemu procesu druge ekipe in izmenjati strokovno znanje.

In zakaj potrebujemo odprto kodo?

Želimo pokazati zrelost našega strokovnega znanja in pridobiti kakovostne povratne informacije: človek zunaj banke bo lahko prinesel nekaj od sebe. Zanima nas tudi razvoj praks za delo z mikrostoritvami in DDD na .NET v industriji, morda bo kdo želel prevzeti določene dele ogrodja.

Pravzaprav ViennaNET

Zdaj pa si poglejmo pobližje. Celotna izvorna koda je objavljena tukaj.

ViennaNET.WebApi.*

Ta nabor knjižnic je sestavljen iz »korenskega« ViennaNET.WebApi, ki vsebuje gradbeni razred za storitev CompanyHostBuilder, in nabora konfiguratorjev ViennaNET.WebApi.Configurators.*, od katerih vam vsak omogoča dodajanje in konfiguriranje nekaterih funkcij ustvarjenemu storitev. Med konfiguratorji lahko najdete povezave za beleženje, diagnostiko, vrste avtentikacije in avtorizacije, razmetavanje itd.

ViennaNET.WebApi.Runners.* vsebuje tudi vnaprej konfigurirane graditelje storitev. Ti paketi vam omogočajo, da si ne zapomnite vsakič, ko ustvarite novo storitev, kateri konfiguratorji morajo biti povezani. Vendar na noben način ne omejujejo funkcionalnosti graditelja storitev.

ViennaNET.Mediator.*

Knjižnice, ki vam omogočajo ustvarjanje notranjega vmesnega vodila za ukaze in zahteve znotraj storitve. Ta pristop vam omogoča, da zmanjšate število DI injekcij na eno, na primer v krmilnikih. Zaradi tega lahko zahtevam dodate različne dekoratorje, kar poenoti njihovo obdelavo in zmanjša količino kode.

ViennaNET.Validacija

Sklop, ki vsebuje nabor razredov za ustvarjanje pravil preverjanja in zaporedij iz njih. Je zelo priročen za implementacijo validacije domene, saj omogoča opis vsakega poslovnega pogoja v obliki enostavnega in ločenega pravila.

ViennaNET.Redis

Knjižnica z ovoji za priročno delo z Redisom kot predpomnilnikom v pomnilniku.

ViennaNET.Specifikacije

Sklop, ki vsebuje razrede, ki izvajajo vzorec specifikacije.

To ni vse, kar je v našem kompletu. Ostalo lahko vidite v repozitoriju GitHub. Naše knjižnice za delo z bazami podatkov nameravamo kmalu izdati za OpenSource.

Hvala za vašo pozornost, veselimo se vaših komentarjev in zahtevkov za vleko.

Vir: www.habr.com

Dodaj komentar