ViennaNET: серверге арналған кітапханалар жинағы

Привет!

Біз Raiffeisenbank-тегі .NET әзірлеушілерінің қауымдастығымыз және бір экожүйемен микросервистерді жылдам жасау үшін .NET Core негізіндегі инфрақұрылымдық кітапханалар жиынтығы туралы айтқымыз келеді. Олар оны Open Source-қа әкелді!

ViennaNET: серверге арналған кітапханалар жинағы

Біраз тарих

Бір кездері бізде үлкен монолитті жоба болды, ол бірте-бірте микросервистердің жиынтығына айналды (бұл процестің ерекшеліктері туралы сіз мына жерден оқи аласыз. Бұл мақала). Процесс барысында біз жаңа микросервистерді жасау кезінде жиі әртүрлі инфрақұрылымдық шешімдерді көшіруге тура келетін мәселеге тап болдық - мысалы, журнал жүргізуді орнату, дерекқормен жұмыс істеу, WCF және т.б. Бұл жобада бір команда жұмыс істеді және барлығы инфрақұрылыммен жұмыс істеудің белгілі бір тәсіліне үйреніп қалған. Сондықтан біз жалпы кодты бөлек репозиторийге бөліп, жиналған кітапханаларды Nuget бумаларына орап, оларды ішкі Nuget репозиторийіне орналастырдық.

Уақыт өтті, жоба бірте-бірте бөлшектенді және қазіргі заманғы JS жүйесінде жаңа клиенттік модульдерді жасау және оларды браузерде іске қосу ниеті пайда болды. Біз WCF/SOAP-тан REST/HTTP-ге көшуді бастадық, сондықтан AspNet WebApi негізіндегі қызметтерді жылдам іске қосу үшін жаңа кітапханалар қажет болды. .Net Framework 4.5-тің бірінші нұсқасын біздің сәулетшіміз бос уақытында тізе бүгіп тұра жаздады, бірақ ол Program.cs ішінде авторизациясы (NTLM) бар үш жолдан тұратын қызметті іске қосуға мүмкіндік берді, журнал жүргізу, Swagger, IoC/DI Castle Windsor негізіндегі, бүкіл жоба бойынша аяғына дейін тіркеуді қамтамасыз ету үшін әртүрлі тақырыптарды жіберетін теңшелген HTTP клиенттері. Және бұл барлық нәрсені одан әрі тікелей қызмет конфигурация файлында конфигурациялауға болады.

Дегенмен, бәрі тегіс болған жоқ: бұл кітапхана жаңа модульдерді енгізу тұрғысынан өте икемсіз болып шықты. Мысалы, егер сізге арнайы аралық бағдарламалық құралды қосу қажет болса, сізге жаңа жинақ жасау және қызметті іске қосатын негізгі сыныптан мұра алу қажет болды, бұл өте қолайсыз болды. Бақытымызға орай, мұндай жағдайлар көп болған жоқ.

Докер мен Кубернетес дәуірі

Docker және Kubernetes толқыны бізге жеткен уақыт келді, біз оны мұқият қадағаладық: бұл .Net Core-де технологиялар бойынша әрі қарай жылжу үшін тамаша мүмкіндік болды. Бұл қызметтерді іске қосу үшін бізге жаңа инфрақұрылым қажет дегенді білдіреді: кейбір кітапханалар .Net Framework жүйесінен .Net Standard және .Net Core жүйесіне іс жүзінде еш өзгеріссіз көшті, ал кейбіреулері шамалы жақсартулармен көшті. Бірақ бәрінен бұрын мен AspNet Core жүйесінде қызметтерді іске қосумен байланысты функционалдылықты қайта өңдегім келді.

Біз қарастырған бірінші нәрсе - алдыңғы нұсқаның негізгі кемшілігін жоюға болатын тұжырымдама: икемділіктің болмауы. Сондықтан бүкіл кітапхана жүйесін мүмкіндігінше тәуелсіз және модульдік ету және конструктор ретінде функционалдылыққа қажетті қызметтерді жинау туралы шешім қабылданды.

Негізгі мақсат – мәліметтер базасымен, автобустармен және басқа қызметтермен өзара әрекеттесу жолын сипаттайтын бірыңғай тәсілді құру. Біз интеграцияны жылдам және ауыртпалықсыз жасауға тырыстық, ал әзірлеушілер инфрақұрылымға емес, бизнес логикасын жазуға назар аудара алады - ол қазірдің өзінде дайын. Жалпы репозиторий командалардағы өзара әрекеттесу тәжірибесін жақсартуға көмектеседі: өте ұқсас ішкі инфрақұрылымдар пайдаланылғанда, басқа топтың даму процесіне қосылу және тәжірибе алмасу оңайырақ.

Ашық бастапқы код бізге не үшін қажет?

Біз өз тәжірибеміздің жетілгендігін көрсеткіміз келеді және жоғары сапалы кері байланыс алғымыз келеді: банктен тыс адам өзінен бір нәрсе әкеле алады. Біз сондай-ақ өнеркәсіпте .NET жүйесінде микросервистермен және DDD-мен жұмыс істеу тәжірибесін дамытуға мүдделіміз, мүмкін біреу рамканың белгілі бір бөліктерін иемденгісі келетін шығар.

Шын мәнінде, ViennaNET

Енді толығырақ қарастырайық. Толық бастапқы код осында орналастырылған.

ViennaNET.WebApi.*

Бұл кітапханалар жинағы CompanyHostBuilder қызметіне арналған құрастырушы сыныбын қамтитын ViennaNET.WebApi «түбірінен» және ViennaNET.WebApi.Configurators.* конфигураторларының жиынтығынан тұрады, олардың әрқайсысы жасалғанға кейбір функцияларды қосуға және конфигурациялауға мүмкіндік береді. қызмет көрсету. Конфигураторлар арасында журналға, диагностикаға, аутентификация және авторизация түрлеріне, свеггерге және т.б. үшін қосылымдарды таба аласыз.

ViennaNET.WebApi.Runners.* сонымен қатар алдын ала конфигурацияланған сервис құрастырушыларын қамтиды. Бұл пакеттер конфигураторлар қосылуы қажет жаңа қызметті жасаған сайын есте сақтамауға мүмкіндік береді. Дегенмен, олар сервис құрастырушысының функционалдығын ешбір жолмен шектемейді.

ViennaNET.Mediator.*

Қызмет ішіндегі пәрмендер мен сұраулар үшін ішкі делдал шинасын жасауға мүмкіндік беретін кітапханалар. Бұл тәсіл DI инъекцияларының санын біреуге дейін азайтуға мүмкіндік береді, мысалы, контроллерлерде. Осының арқасында сұрауларға әртүрлі декораторларды қосуға болады, бұл оларды өңдеуді біріктіреді және код көлемін азайтады.

ViennaNET.Validation

Валидация ережелері мен олардан реттіліктерді жасауға арналған сыныптар жиынын қамтитын жинақ. Ол доменді тексеруді жүзеге асыру үшін өте ыңғайлы, өйткені ол әрбір бизнес жағдайын қарапайым және бөлек ереже түрінде сипаттауға мүмкіндік береді.

ViennaNET.Redis

Жадтағы кэш ретінде Redis-пен ыңғайлы жұмыс істеуге арналған орауыштары бар кітапхана.

ViennaNET. Техникалық сипаттамалар

Спецификация үлгісін орындайтын сыныптарды қамтитын жинақ.

Бұл біздің жинақтағы барлық нәрсе емес. Қалғанын көре аласыз GitHub репозиторийінде. Жақын арада OpenSource жүйесіне дерекқорлармен жұмыс істеу үшін кітапханаларымызды шығаруды жоспарлап отырмыз.

Назарларыңызға рахмет, пікірлеріңіз бен сұрауларыңызды күтеміз.

Ақпарат көзі: www.habr.com

пікір қалдыру