ViennaNET: sada knižníc pre backend

Ahoj všetci!

Sme komunita .NET vývojárov v Raiffeisenbank a chceme hovoriť o sade infraštruktúrnych knižníc založených na .NET Core na rýchle vytváranie mikroslužieb s jediným ekosystémom. Priniesli to do Open Source!

ViennaNET: sada knižníc pre backend

Trocha histórie

Kedysi sme mali veľký monolitický projekt, ktorý sa postupne zmenil na súbor mikroslužieb (o vlastnostiach tohto procesu si môžete prečítať v v tomto článku). V procese sme narazili na problém, že pri vytváraní nových mikroslužieb sme museli často kopírovať rôzne infraštruktúrne riešenia – ako nastavenie logovania, práca s databázou, WCF atď. Na tomto projekte pracoval jeden tím a všetci už boli zvyknutí na nejaký zabehnutý prístup k práci s infraštruktúrou. Preto sme spoločný kód oddelili do samostatného úložiska, zozbierané knižnice sme zabalili do balíčkov Nuget a umiestnili ich do nášho interného úložiska Nuget.

Čas plynul, projekt sa postupne fragmentoval a bola tu túžba vytvoriť nové moduly na strane klienta na modernom frameworku JS a spustiť ich v prehliadači. Začali sme prechádzať z WCF/SOAP na REST/HTTP, takže sme potrebovali nové knižnice na rýchle spustenie služieb založených na AspNet WebApi. Prvú verziu na .Net Framework 4.5 vytvoril náš architekt takmer na kolene vo svojom voľnom čase, ale hneď po vybalení umožnila spustiť službu s tromi riadkami v Program.cs, ktorá obsahovala autorizáciu (NTLM), logging, Swagger, IoC/DI on založené na Castle Windsor, prispôsobení HTTP klienti, ktorí posielajú rôzne hlavičky, aby poskytovali end-to-end logovanie počas celého projektu. A toto celé sa dalo ďalej konfigurovať priamo v konfiguračnom súbore služby.

Nie všetko však prebehlo hladko: táto knižnica sa ukázala ako mimoriadne neflexibilná z hľadiska zavádzania nových modulov. Napríklad, ak ste potrebovali pridať nejaký špeciálny middleware, museli ste vytvoriť nové zostavenie a dediť zo základnej triedy, ktorá spúšťa službu, čo bolo mimoriadne nepohodlné. Našťastie takýchto prípadov nebolo veľmi veľa.

Éra Docker a Kubernetes

Nastal čas, keď k nám dorazila vlna Dockera a Kubernetes, ktorú sme pozorne sledovali: napokon to bola skvelá šanca začať sa posúvať ďalej v technológiách, v .Net Core. To znamená, že na prevádzkovanie služieb budeme potrebovať novú infraštruktúru: niektoré knižnice prešli z .Net Frameworku na .Net Standard a .Net Core prakticky bez zmien, niektoré s menšími vylepšeniami. Ale hlavne som chcel prepracovať funkcionalitu spojenú so spúšťaním služieb na AspNet Core.

Prvá vec, ktorú sme zvážili, bol koncept, ktorý by odstránil hlavnú nevýhodu predchádzajúcej verzie: nedostatok flexibility. Preto bolo rozhodnuté urobiť celý knižničný systém čo najviac nezávislým a modulárnym a zhromaždiť služby potrebné pre funkčnosť ako konštruktér.

Hlavným cieľom je vytvoriť jednotný prístup, ktorý popisuje interakciu s databázami, autobusmi a inými službami. Snažili sme sa, aby boli integrácie rýchle a bezbolestné a vývojári sa mohli sústrediť na písanie obchodnej logiky namiesto infraštruktúry – tá je už pripravená. Spoločné úložisko pomáha zlepšovať skúsenosti z interakcie v rámci tímov: keď sa používajú veľmi podobné interné infraštruktúry, je jednoduchšie zapojiť sa do procesu vývoja iného tímu a vymieňať si odborné znalosti.

A prečo potrebujeme Open Source?

Chceme ukázať vyspelosť našej odbornosti a získať kvalitnú spätnú väzbu: človek mimo banky bude môcť priniesť niečo zo seba. Zaujíma nás aj vývoj praktík pre prácu s mikroslužbami a DDD na .NET v priemysle, možno bude chcieť niekto prevziať niektoré časti frameworku.

Vlastne ViennaNET

Teraz sa na to poďme pozrieť bližšie. Celý zdrojový kód je zverejnený tu.

ViennaNET.WebApi.*

Táto sada knižníc pozostáva z „koreňového“ ViennaNET.WebApi, ktorý obsahuje triedu builder pre službu CompanyHostBuilder a sadu konfigurátorov ViennaNET.WebApi.Configurators.*, z ktorých každý vám umožňuje pridávať a konfigurovať niektoré funkcie do vytvoreného služby. Medzi konfigurátormi nájdete pripojenia pre protokolovanie, diagnostiku, typy autentifikácie a autorizácie, swagger atď.

ViennaNET.WebApi.Runners.* obsahuje aj vopred nakonfigurované nástroje na tvorbu služieb. Tieto balíčky vám umožňujú nezapamätať si pri každom vytváraní novej služby, ktoré konfigurátory je potrebné pripojiť. Nijako však neobmedzujú funkčnosť tvorcu služby.

ViennaNET.Mediator.*

Knižnice, ktoré vám umožňujú vytvoriť internú sprostredkovateľskú zbernicu pre príkazy a požiadavky v rámci služby. Tento prístup vám umožňuje znížiť počet DI vstrekov na jeden, napríklad v ovládačoch. Vďaka tomu môžete do požiadaviek pridávať rôzne dekorátory, čím sa zjednocuje ich spracovanie a znižuje sa množstvo kódu.

ViennaNET.Validácia

Zostava obsahujúca množinu tried na vytváranie overovacích pravidiel a sekvencií z nich. Je veľmi vhodný na implementáciu overovania domény, pretože umožňuje popísať každú obchodnú podmienku formou jednoduchého a samostatného pravidla.

ViennaNET.Redis

Knižnica s obalmi pre pohodlnú prácu s Redis ako vyrovnávacou pamäťou v pamäti.

ViennaNET.Špecifikácie

Zostava obsahujúca triedy, ktoré implementujú vzor špecifikácie.

Toto nie je všetko, čo je v našej zostave. Môžete vidieť zvyšok v úložisku GitHub. Čoskoro plánujeme uvoľniť naše knižnice na prácu s databázami pre OpenSource.

Ďakujeme za pozornosť, tešíme sa na vaše komentáre a žiadosti o stiahnutie.

Zdroj: hab.com

Pridať komentár