ViennaNET: joukko kirjastoja taustajärjestelmää varten

Hei kaikille!

Olemme Raiffeisenbankin .NET-kehittäjien yhteisö ja haluamme puhua joukosta infrastruktuurikirjastoja, jotka perustuvat .NET Coreen mikropalveluiden nopeaan luomiseen yhdellä ekosysteemillä. He toivat sen avoimeen lähdekoodiin!

ViennaNET: joukko kirjastoja taustajärjestelmää varten

Vähän historiaa

Olipa kerran suuri monoliittinen projekti, joka vähitellen muuttui joukoksi mikropalveluita (voit lukea tämän prosessin ominaisuuksista tässä artikkelissa). Prosessissa törmäsimme siihen ongelmaan, että uusia mikropalveluita luotaessa jouduimme usein kopioimaan erilaisia ​​infrastruktuuriratkaisuja - kuten kirjauksen määrittäminen, työskentely tietokannan kanssa, WCF jne. Yksi tiimi työskenteli tämän projektin parissa, ja kaikki olivat jo tottuneet johonkin vakiintuneeseen lähestymistapaan infrastruktuurin kanssa työskentelemiseen. Siksi erotimme yhteisen koodin erilliseen arkistoon, käärimme kerätyt kirjastot Nuget-paketteihin ja sijoitimme ne sisäiseen Nuget-arkistoon.

Aikaa kului, projekti pirstoutui vähitellen ja haluttiin luoda uusia asiakaspuolen moduuleja nykyaikaiselle JS-kehykselle ja ajaa niitä selaimessa. Aloitimme siirtymisen WCF/SOAPista REST/HTTP:hen, joten tarvitsimme uusia kirjastoja käynnistääksemme nopeasti AspNet WebApiin perustuvia palveluita. Ensimmäisen version .Net Framework 4.5:stä teki arkkitehtimme lähes polvillaan vapaa-ajallaan, mutta paketista otettuna se mahdollisti kolmerivisen palvelun käynnistämisen Program.cs:ssä, joka sisälsi valtuutuksen (NTLM), kirjaus, Swagger, Castle Windsoriin perustuva IoC/DI, mukautetut HTTP-asiakkaat, jotka välittävät erilaisia ​​otsikoita ja mahdollistavat päästä päähän -kirjauksen koko projektin ajan. Ja koko tämä asia voidaan määrittää edelleen suoraan palvelun määritystiedostossa.

Kaikki ei kuitenkaan ollut sujuvaa: tämä kirjasto osoittautui erittäin joustamattomaksi uusien moduulien käyttöönoton suhteen. Jos esimerkiksi piti lisätä erityistä väliohjelmistoa, jouduit luomaan uuden kokoonpanon ja perimään palvelua pyörittävästä perusluokasta, mikä oli erittäin hankalaa. Onneksi tällaisia ​​tapauksia ei ollut kovin paljon.

Dockerin ja Kubernetesin aikakausi

On tullut aika, jolloin Dockerin ja Kubernetesin aalto saavutti meidät, jota seurasimme tiiviisti: olihan se loistava tilaisuus lähteä liikkeelle teknologioiden varrella, .Net Coressa. Tämä tarkoittaa, että tarvitsemme uuden infrastruktuurin palvelujen suorittamiseen: osa kirjastoista on siirtynyt .Net Frameworkista .Net Standardiin ja .Net Coreen käytännössä ilman muutoksia, osa pienin parannuksin. Mutta ennen kaikkea halusin muokata AspNet Coren palveluiden käynnistämiseen liittyviä toimintoja.

Ensimmäinen asia, jota mietimme, oli konsepti, joka poistaisi edellisen version päähaittapuolen: joustavuuden puutteen. Tästä syystä päätettiin tehdä koko kirjastojärjestelmästä mahdollisimman itsenäinen ja modulaarinen ja koota toimivuuden edellyttämät palvelut rakentajana.

Päätavoitteena on luoda yhtenäinen lähestymistapa, joka kuvaa tietokantojen, linja-autojen ja muiden palvelujen vuorovaikutusta. Yritimme tehdä integroinnista nopeita ja kivuttomia, ja kehittäjät voivat keskittyä liiketoimintalogiikan kirjoittamiseen infrastruktuurin sijaan - se on jo valmis. Yhteinen tietovarasto auttaa parantamaan vuorovaikutuksen kokemusta tiimien sisällä: kun käytetään hyvin samanlaisia ​​sisäisiä infrastruktuureja, on helpompi liittyä toisen tiimin kehitysprosessiin ja vaihtaa asiantuntemusta.

Ja miksi tarvitsemme avoimen lähdekoodin?

Haluamme näyttää osaamisemme kypsyyden ja saada laadukasta palautetta: pankin ulkopuolinen ihminen voi tuoda jotain itsestään. Olemme myös kiinnostuneita käytäntöjen kehittämisestä työskentelyyn mikropalvelujen ja DDD:n kanssa .NET:ssä alalla, ehkä joku haluaa ottaa haltuunsa tietyt puitteet.

Itse asiassa ViennaNET

Katsotaanpa nyt tarkemmin. Täysi lähdekoodi on julkaistu täällä.

ViennaNET.WebApi.*

Tämä kirjastojoukko koostuu "juuritason" ViennaNET.WebApista, joka sisältää CompanyHostBuilder-palvelun rakentajaluokan, ja joukon konfiguraattoreita ViennaNET.WebApi.Configurators.*, joista jokaisen avulla voit lisätä ja määrittää joitain toimintoja luotuun palvelua. Konfiguraattorien joukosta löydät yhteydet lokiin, diagnostiikkaan, todennus- ja valtuutustyyppeihin, swaggeriin jne.

ViennaNET.WebApi.Runners.* sisältää myös esikonfiguroidut palvelunrakentajat. Näiden pakettien avulla et muista joka kerta, kun luot uuden palvelun, mitkä konfiguraattorit on yhdistettävä. Ne eivät kuitenkaan rajoita palvelurakentajan toimivuutta millään tavalla.

ViennaNET.Mediator.*

Kirjastot, joiden avulla voit luoda sisäisen välitysväylän käskyjä ja pyyntöjä varten palvelussa. Tämän lähestymistavan avulla voit vähentää DI-injektioiden määrää yhteen, esimerkiksi ohjaimissa. Tämän ansiosta voit lisätä pyyntöihin erilaisia ​​sisustajia, mikä yhtenäistää niiden käsittelyä ja vähentää koodin määrää.

ViennaNET.Validation

Kokoonpano, joka sisältää joukon luokkia validointisääntöjen ja sekvenssien luomiseksi niistä. Se on erittäin kätevä toimialueen validoinnin toteuttamiseen, koska sen avulla voit kuvata jokaista liiketoimintaehtoa yksinkertaisen ja erillisen säännön muodossa.

ViennaNET.Redis

Kirjasto, jossa on kääreet kätevään työskentelyyn Rediksen kanssa muistin välimuistina.

ViennaNET.Specifications

Kokoonpano, joka sisältää luokkia, jotka toteuttavat Specification-mallin.

Tämä ei ole kaikki, mitä sarjassamme on. Voit nähdä loput GitHub-arkistossa. Aiomme julkaista tietokantatyöskentelyä varten kirjastomme pian OpenSourceen.

Kiitos huomiostasi, odotamme kommenttejasi ja vetopyyntöjäsi.

Lähde: will.com

Lisää kommentti