ViennaNET: raamatukogude kogum tagaplaanile

Tere kÔigile!

Me oleme .NET arendajate kogukond Raiffeisen Bankist ja soovime rÀÀkida .NET Core infrastruktuuride raamatukogudest, mis vĂ”imaldavad kiiresti luua mikroteenuseid ĂŒhe ja sama ökosĂŒsteemiga. Toode on nĂŒĂŒd avatud lĂ€htekoodiga!

ViennaNET: raamatukogude kogum tagaplaanile

Veidi ajalugu

Kunagi oli meil suur monoliitne projekt, mis jĂ€rk-jĂ€rgult muutus mikroteenuste kogumiks (selle protsessi spetsiifikatest saate lugeda selles artiklis). Protsessi kĂ€igus seisisime silmitsi probleemiga, et uute mikroteenuste loomisel pidime sageli kopeerima erinevaid infrastruktuurilahendusi – nĂ€iteks logimise seadistamine, andmebaasidega töötamine, WCF jne. Selle projekti kallal töötas ĂŒks meeskond, ja kĂ”ik olid juba harjunud teatud vĂ€ljakujunenud lĂ€henemisega infrastruktuurile. SeetĂ”ttu eraldasime ĂŒhise koodi eraldi hoidlasse, pakkisime koostatud raamatukogud Nuget-pakettidesse ja panime need meie sisemisse Nuget-laokotta.

Aeg mööda ja projekt hakkas osadeks lagunema, tekkis soov luua uusi kliendipoolseid mooduleid kaasaegsele Js-raamistikule ja kĂ€ivitada need brauseris. Alustasime ĂŒleminekut WCF/SOAP-lt REST/HTTP-le ning seetĂ”ttu vajasime uusi raamatukogusid, et kiiresti kĂ€ivitada teenuseid AspNet WebApi baasil. Esiteks versioon .Net Framework 4.5 oli meie arhitekti poolt peaaegu kĂ€tega vabal ajal valmis tehtud, kuid see vĂ”imaldas juba vĂ€lja kastist kolme reaga Program.cs-s kĂ€ivitada teenuse, mis sisaldas autoriseerimist (NTLM), logimist, Swaggerit, IoC/DI Castle Windsor baasil, seadistatud HTTP-kliendi, mis edastas erinevaid pĂ€iseid, et tagada kogu projekti ulatuslik logimine. Ja kĂ”ik see oli vĂ”imalik lisaks konfigureerida otse teenuse konfiguratsioonifailis.

Kuid kĂ”ik ei olnud sujuv: see raamatukogu osutus ÀÀrmiselt jĂ€igaks uute moodulite integreerimisel. NĂ€iteks, kui oli vaja lisada mingit erilist middleware'i, tuli luua uus kogumik ja alustada pĂ”hiklassist, mis kĂ€ivitas teenuse, mis oli ÀÀrmiselt ebamugav. Õnneks selliseid juhtumeid ei olnud vĂ€ga palju.

Docker ja Kubernetes aeg

On aeg, mil ka meid on tabanud Docker ja Kubernetes laine, millele me tÀhelepanelikult oleme jÀlginud: see oli suurepÀrane vÔimalus liikuda edasi tehnoloogiatega .Net Core. Seega vajame uut infrastruktuuri teenuste kÀivitamiseks: osa teeke kolis .Net Frameworkist .Net Standardisse ja .Net Core'sse praktiliselt muutumatuna, osa vÀikeste tÀiustustega. Kuid kÔige enam soovisime tÀiustada funktsionaalsust, mis on seotud teenuste kÀivitamisega AspNet Core'il.

Esimese sammuna kaaluti kontseptsiooni, mis vĂ”imaldab kĂ”rvaldada eelmine versioon peamise puuduse: paindlikkuse puudumine. SeetĂ”ttu otsustati teha kogu teekide sĂŒsteem vĂ”imalikult sĂ”ltumatuks ja modulaarseks ning koguda vajalikud teenused funktsioonide kaupa nagu ehituskomplekt.

Peamine eesmĂ€rk on luua ĂŒhtne lĂ€henemine, mis kirjeldab, kuidas suhelda andmebaaside, busside ja teiste teenustega. Oleme pĂŒĂŒdnud, et integratsioonid oleksid kiired ja valutud, vĂ”imaldades arendajatel keskenduda Ă€riloogika kirjutamisele, mitte infrastruktuurile — see on juba valmis. Ühine repository aitab parandada meeskondade koostöökogemust: kui kasutatakse vĂ€ga sarnaseid siseseid infrastruktuure, on kergem liituda teise meeskonna arendusprotsessiga ja jagada oma ekspertiisi.

Ja miks me vajame avatud lÀhtekoodi?

Tahame nĂ€idata oma ekspertiisi kĂŒpsust ja saada kvaliteetset tagasisidet: inimene, kes ei ole pangas, saab midagi juurde tuua. Samuti on meil huvi arendada mikroteenuste ja DDD praktikaid .NETis tööstuses, vĂ”ib-olla soovib keegi teatud osasid raamistikust endale vĂ”tta.

Nii et, ViennaNET

NĂŒĂŒd vaatame kĂ”ike lĂ€hemalt. TĂ€ielik lĂ€htekood on siin.

ViennaNET.WebApi.*

See library package koosneb ViennaNET.WebApi «juurest», mis sisaldab CompanyHostBuilder teenuse ehitajaklassi ja ViennaNET.WebApi.Configurators.* konfigureerijat, mis vĂ”imaldavad lisada ja seadistada teenusesse erinevat funktsionaalsust. Konfigureerijate seas on olemas logimise, diagnostika, autentimise ja autoriseerimise tĂŒĂŒbid, swagger jne.

ViennaNET.WebApi.Runners.* sisaldab eelnevalt seadistatud teenuse ehitajaid. Need paketid aitavad vÀltida igakordset muretsega, milliseid konfigureerijaid uue teenuse loomisel kasutada. Samuti ei piira need teenuse ehitaja funktsionaalsust.

ViennaNET.Mediator.*

Raamatukogud, mis vĂ”imaldavad luua teenuse sees sisemise vahepealse bussi kĂ€sud ja pĂ€ringud. Selline lĂ€henemine aitab vĂ€hendada DI-sĂŒstide arvu ĂŒhega, nĂ€iteks kontrollerites. Sellega saab lisada erinevaid dekoraatoreid pĂ€ringutele, mis ĂŒhtlustab nende töötlemist ja vĂ€hendab koodi kogust.

ViennaNET.Validation

Kogumik, mis sisaldab klasside kogumit valideerimisreeglite ja nende jÀrjekordade loomiseks. VÀga mugav domeenivalideerimise rakendamiseks, kuna vÔimaldab kirjeldada igat Àritingimust lihtsalt ja eraldi reegli vormis.

ViennaNET.Redis

Raamatukogu, mis sisaldab mÀhiseid, et hÔlbustada Redis'i kasutamist in-memory cache'ina.

ViennaNET.Specifications

Kogumik, mis sisaldab klasse, mis rakendavad 'Spetsifikatsiooni' mustrit.

See ei ole kaugeltki kĂ”ik, mis meie kogumikus on. ÜlejÀÀnut saab vaadata GitHubi repositooriumis. Meie andmebaasidega töötamiseks mĂ”eldud raamatukogud on peagi vabaks saadaval Open Source.

TÀname tÀhelepanu eest, ootame teie kommentaare ja pull request'e.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster