ViennaNET: arxa plan üçün kitabxanalar dəsti

Hello!

Biz Raiffeisenbank-da .NET tərtibatçıları icmasıyıq və biz bir ekosistemlə mikroservisləri tez yaratmaq üçün .NET Core-a əsaslanan bir sıra infrastruktur kitabxanaları haqqında danışmaq istəyirik. Açıq Mənbəyə gətirdilər!

ViennaNET: arxa plan üçün kitabxanalar dəsti

Bir az tarixi

Bir vaxtlar bizim böyük monolit layihəmiz var idi, o, tədricən mikroservislər dəstinə çevrildi (bu prosesin xüsusiyyətləri haqqında burada oxuya bilərsiniz). Bu məqalə). Prosesdə belə bir problemlə qarşılaşdıq ki, yeni mikroservislər yaradan zaman biz tez-tez müxtəlif infrastruktur həllərini köçürməli olurduq – məsələn, girişin qurulması, verilənlər bazası, WCF ilə işləmək və s. Bu layihə üzərində bir komanda çalışdı və hər kəs artıq infrastrukturla işləmək üçün müəyyən yanaşmaya öyrəşmişdi. Buna görə də, ümumi kodu ayrıca bir depoya ayırdıq, toplanmış kitabxanaları Nuget paketlərinə bükdük və onları daxili Nuget repozitorumuza yerləşdirdik.

Vaxt keçdi, layihə tədricən parçalandı və müasir JS çərçivəsində yeni müştəri modulları yaratmaq və onları brauzerdə işə salmaq istəyi yarandı. Biz WCF/SOAP-dan REST/HTTP-ə keçməyə başladıq, ona görə də AspNet WebApi əsasında xidmətləri tez işə salmaq üçün bizə yeni kitabxanalar lazım idi. .Net Framework 4.5-də ilk versiyanı memarımız boş vaxtlarında, demək olar ki, diz çökdürərək hazırlamışdı, lakin bu, proqram.cs-də avtorizasiya (NTLM) olan üç sətirdən ibarət xidməti işə salmağa imkan verdi. logging, Swagger, IoC/DI Castle Windsor-a əsaslanaraq, bütün layihə boyunca başdan-başa girişi təmin etmək üçün müxtəlif başlıqları yönləndirən fərdiləşdirilmiş HTTP müştəriləri. Və bütün bu şey birbaşa xidmət konfiqurasiya faylında daha da konfiqurasiya edilə bilər.

Bununla belə, hər şey hamar deyildi: bu kitabxana yeni modulların tətbiqi baxımından son dərəcə çevik olduğu ortaya çıxdı. Məsələn, bəzi xüsusi ara proqram əlavə etmək lazımdırsa, siz yeni montaj yaratmalı və xidməti idarə edən əsas sinifdən miras almalı idiniz, bu isə son dərəcə əlverişsiz idi. Xoşbəxtlikdən belə hallar çox deyildi.

Docker və Kubernetes dövrü

Docker və Kubernetes dalğasının bizə çatdığı vaxt gəldi, biz bunu yaxından izlədik: nəhayət, bu, .Net Core-da texnologiyalar üzrə irəliləməyə başlamaq üçün əla şans idi. Bu o deməkdir ki, xidmətləri işlətmək üçün bizə yeni infrastruktur lazım olacaq: bəzi kitabxanalar .Net Framework-dən .Net Standard və .Net Core-a praktiki olaraq heç bir dəyişiklik etmədən, bəziləri isə kiçik təkmilləşdirmələrlə köçüb. Ancaq ən çox AspNet Core-da xidmətlərin işə salınması ilə əlaqəli funksionallığı yenidən işləmək istədim.

İlk nəzərdən keçirdiyimiz şey, əvvəlki versiyanın əsas çatışmazlığını aradan qaldıracaq bir konsepsiya idi: elastikliyin olmaması. Buna görə də, bütün kitabxana sistemini mümkün qədər müstəqil və modul etmək və konstruktor kimi funksionallıq üçün lazım olan xidmətləri toplamaq qərara alınıb.

Əsas məqsəd verilənlər bazası, avtobuslar və digər xidmətlərlə qarşılıqlı əlaqəni təsvir edən vahid yanaşma yaratmaqdır. İnteqrasiyaları tez və ağrısız etməyə çalışdıq və tərtibatçılar infrastrukturdan daha çox biznes məntiqinin yazılması üzərində cəmləşə bildilər - o, artıq hazırdır. Ümumi depo komandalar daxilində qarşılıqlı əlaqə təcrübəsini yaxşılaşdırmağa kömək edir: çox oxşar daxili infrastrukturlardan istifadə edildikdə, başqa komandanın inkişaf prosesinə qoşulmaq və təcrübə mübadiləsi aparmaq daha asandır.

Və niyə bizə Açıq Mənbə lazımdır?

Biz təcrübəmizin yetkinliyini göstərmək və yüksək keyfiyyətli rəy almaq istəyirik: bankdan kənarda olan şəxs özündən nəsə gətirə biləcək. Biz həmçinin sənayedə .NET-də mikroservislər və DDD ilə işləmək üçün təcrübələrin inkişafı ilə maraqlanırıq, bəlkə kimsə çərçivənin müəyyən hissələrini ələ keçirmək istəyəcək.

Əslində, ViennaNET

İndi daha yaxından nəzər salaq. Tam mənbə kodu burada yerləşdirilib.

ViennaNET.WebApi.*

Bu kitabxanalar toplusu CompanyHostBuilder xidməti üçün qurucu sinfini ehtiva edən “kök” ViennaNET.WebApi-dən və hər biri yaradılmışa bəzi funksionallıq əlavə etməyə və konfiqurasiya etməyə imkan verən ViennaNET.WebApi.Configurators.* konfiquratorlar dəstindən ibarətdir. xidmət. Konfiquratorlar arasında logging, diaqnostika, autentifikasiya və avtorizasiya növləri, ləzzət və s. üçün bağlantılar tapa bilərsiniz.

ViennaNET.WebApi.Runners.* həmçinin əvvəlcədən konfiqurasiya edilmiş xidmət qurucularını ehtiva edir. Bu paketlər konfiquratorların qoşulmalı olduğu hər dəfə yeni xidmət yaratdığınızı xatırlamamağa imkan verir. Bununla belə, onlar xidmət qurucusunun funksionallığını heç bir şəkildə məhdudlaşdırmırlar.

ViennaNET.Mediator.*

Xidmət daxilində əmrlər və sorğular üçün daxili vasitəçi avtobus yaratmağa imkan verən kitabxanalar. Bu yanaşma, məsələn, kontrollerlərdə DI inyeksiyalarının sayını birinə endirməyə imkan verir. Bunun sayəsində sorğulara müxtəlif dekoratorlar əlavə edə bilərsiniz ki, bu da onların işlənməsini birləşdirir və kodun miqdarını azaldır.

ViennaNET.Validation

Doğrulama qaydaları və onlardan ardıcıllıq yaratmaq üçün siniflər toplusunu ehtiva edən montaj. Bu, hər bir iş şəraitini sadə və ayrıca qayda şəklində təsvir etməyə imkan verdiyi üçün domen təsdiqini həyata keçirmək üçün çox rahatdır.

ViennaNET.Redis

Yaddaşdaxili keş kimi Redis ilə rahat işləmək üçün sarğıları olan kitabxana.

ViennaNET.Specifications

Spesifikasiya modelini həyata keçirən sinifləri ehtiva edən montaj.

Bu, bizim dəstimizdə olanların hamısı deyil. Qalanlarına baxa bilərsiniz GitHub deposunda. Tezliklə verilənlər bazası ilə işləmək üçün kitabxanalarımızı OpenSource-a buraxmağı planlaşdırırıq.

Diqqətiniz üçün təşəkkür edirik, şərhlərinizi və istəklərinizi gözləyirik.

Mənbə: www.habr.com

Добавить комментарий