ViennaNET: súbor knižníc pre backend

Ahojte všetci!

Sme komunita .NET vývojárov Raiffeisenbanky a chceme vám prerozprávať o súbore infraštruktúrnych knižníc na .NET Core pre rýchle vytváranie mikroslužieb s jednotným ekosystémom. Uvoľnili sme to do Open Source!

ViennaNET: súbor knižníc pre backend

Trochu histórie

Niekedy sme mali veľký monolitný projekt, ktorý sa postupne menil na súbor mikroslužieb (o špecifikách tohto procesu si môžete prečítať v tomto článku). Počas tohto procesu sme sa stretli s problémom, že pri vytváraní nových mikroslužieb sme často museli kopírovať rôzne infraštruktúrne riešenia – ako napríklad nastavenie logovania, prácu s databázou, WCF a podobne. Na tomto projekte pracoval jeden tím a všetci si už zvykli na určité ustálené prístupy k infraštruktúre. Preto sme vyčlenili spoločný kód do samostatného repozitára, zostavené knižnice sme zabalili do Nuget balíkov a umiestnili do nášho interného Nuget úložiska.

Čas plynul, projekt sa pomaly rozdeľoval, a objavila sa túžba vytvárať nové moduly klientskej časti pomocou moderného JavaScript frameworku a spúšťať ich v prehliadači. Začali sme prechádzať z WCF/SOAP na REST/HTTP, takže sme potrebovali nové knižnice pre rýchly štart služieb na báze AspNet WebApi. Prvá verzia na .Net Framework 4.5 bola vyvinutá naším architektom takmer vo voľnom čase, ale už z krabice umožňovala spustiť službu s trojicou riadkov v Program.cs, ktorá obsahovala autorizáciu (NTLM), logovanie, Swagger, IoC/DI na báze Castle Windsor, nastavené HTTP klienty, ktoré preposielali rôzne hlavičky pre zabezpečenie celoplošného logovania v celom projekte. A všetko to bolo možné dodatočne nakonfigurovať priamo v konfiguračnom súbore služby.

Avšak nie všetko bolo bez komplikácií: táto knižnica sa ukázala ako mimoriadne nepružná z hľadiska nasadzovania nových modulov. Napríklad, ak bolo potrebné pridať nejaké špeciálne middleware, bolo potrebné vytvoriť nový balík a dediť z základnej triedy, ktorá spúšťala službu, čo bolo mimoriadne nepríjemné. Našťastie, takýchto prípadov nebolo veľmi veľa.

Éra Dockeru a Kubernetes

Prišiel čas, keď aj k nám dorazila vlna s Dockerom a Kubernetesom, za ktorou sme pozorne sledovali: bol to totiž skvelý príležitosť posunúť technológie ďalej na .Net Core. To znamená, že budeme potrebovať novú infraštruktúru na spustenie služieb: časť knižníc prešla z .Net Frameworku na .Net Standard a .Net Core prakticky bez zmien, časť s drobnými vylepšeniami. No najviac sme chceli prepracovať funkčnosť spojenú so spúšťaním služieb na AspNet Core.

Najprv sme zvažovali koncept, ktorý by odstránil hlavnú nevýhodu predchádzajúcej verzie: absenciu flexibility. Preto sme sa rozhodli urobiť celú systém knižníc čo najviac nezávislým a modulárnym a zostavovať potrebné funkčné služby ako stavebnicu.

Hlavným cieľom je vytvoriť unifikovaný prístup, ktorý opisuje, ako interagovať s databázami, zónami a inými službami. Snažili sme sa, aby integrácie boli rýchle a bezbolestné, takže sa vývojári mohli sústrediť na písanie biznis logiky, a nie infraštruktúry – tá je už pripravená. Spoločný repozitár pomáha zlepšiť skúsenosť spolupráce v rámci tímov: keď sa používajú veľmi podobné vnútorné infraštruktúry, je jednoduchšie zapojiť sa do vývojového procesu iného tímu a zdieľať odborné znalosti.

A načo nám Open Source?

Chceme ukázať zrelosť našich odborných znalostí a získať kvalitnú spätnú väzbu: človek, ktorý je mimo banky, môže priniesť niečo nové. Taktiež nás zaujíma vývoj praxí práce s mikroservismi a DDD na .NET v priemysle, možno niekto bude chcieť vziať určité časti frameworku so sebou.

Vlastne, ViennaNET

Teraz sa poďme pozrieť na všetko podrobnejšie. Celý zdrojový kód sme umiestnili sem.

ViennaNET.WebApi.*

Tento súbor knižníc pozostáva z "korena" ViennaNET.WebApi, ktorý obsahuje triedu-builder pre službu CompanyHostBuilder, a zo súboru konfigurátorov ViennaNET.WebApi.Configurators.*, každý z nich umožňuje pridať a nakonfigurovať určitú funkčnosť do vytvorenej služby. Medzi konfigurátormi nájdete pripojenie logovania, diagnostiky, typ autentifikácie a autorizácie, swagger a pod.

ViennaNET.WebApi.Runners.* obsahuje predkonfigurované staviteľa služieb. Tieto balíky umožňujú nezapamätávať si zakaždým, keď vytvárate novú službu, aké konfigurátory je potrebné pripojiť. Týmto spôsobom nijako neobmedzujú funkčnosť staviteľa služieb.

ViennaNET.Mediator.*

Knižnice, ktoré umožňujú vytvoriť internú zbernicu pre príkazy a dotazy v rámci služby. Takýto prístup umožňuje znížiť počet DI-injekcií na jednu, napríklad v kontrolerách. Týmto spôsobom je možné pridávať rôzne dekorátory k dotazom, čo unifikuje ich spracovanie a znižuje množstvo kódu.

ViennaNET.Validation

Kolekcia, ktorá obsahuje súbor tried na vytvorenie validačných pravidiel a ich sekvencií. Veľmi praktická na implementáciu doménovej validácie, pretože umožňuje popísať každú obchodnú podmienku ako jednoduché a samostatné pravidlo.

ViennaNET.Redis

Knižnica s obalmi pre jednoduchú prácu s Redis ako in-memory cache.

ViennaNET.Specifications

Kolekcia, ktorá obsahuje triedy implementujúce vzor «Špecifikácia».

To nie je všetko, čo máme v našom súbore. Zvyšok si môžete pozrieť v repozitári na GitHub. Čoskoro plánujeme sprístupniť naše knižnice pre prácu s databázami ako OpenSource.

Ďakujeme za vašu pozornosť, tešíme sa na vaše komentáre a pull requesty.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster