ViennaNET: kumpulan perpustakaan kanggo backend

Всем Привет!

Kita minangka komunitas pangembang .NET ing Raiffeisenbank lan kita pengin ngomong babagan kumpulan perpustakaan infrastruktur adhedhasar .NET Core kanggo nggawe layanan mikro kanthi cepet kanthi ekosistem siji. Dheweke nggawa menyang Open Source!

ViennaNET: kumpulan perpustakaan kanggo backend

Sawetara sejarah

Biyen kita duwe proyek monolitik gedhe, sing mboko sithik dadi set microservices (sampeyan bisa maca babagan fitur proses iki ing artikel iki). Ing proses kasebut, kita nemoni masalah nalika nggawe layanan mikro anyar, asring kudu nyalin macem-macem solusi infrastruktur - kayata nyetel logging, nggarap database, WCF, lsp. Siji tim nggarap proyek iki, lan kabeh wong wis biasa karo sawetara pendekatan sing mapan kanggo nggarap infrastruktur. Mulane, kita misahake kode umum menyang gudang sing kapisah, mbungkus perpustakaan sing diklumpukake ing paket Nuget lan diselehake ing gudang Nuget internal.

Wektu liwati, proyek kasebut mboko sithik pecah, lan ana kepinginan kanggo nggawe modul sisih klien anyar ing kerangka JS modern lan mbukak ing browser. Kita wiwit pindhah saka WCF/SOAP menyang REST/HTTP, mula kita butuh perpustakaan anyar supaya layanan cepet diluncurake adhedhasar AspNet WebApi. Versi pisanan ing .Net Framework 4.5 digawe dening arsitek kita meh ing dhengkul ing wektu luang, nanging metu saka kothak iku bisa kanggo miwiti layanan karo telung baris ing Program.cs sing ngemot wewenang (NTLM), logging, Swagger, IoC / DI adhedhasar Castle Windsor, klien HTTP khusus sing nerusake macem-macem header kanggo nyedhiyakake logging end-to-end ing kabeh proyek. Lan kabeh iki bisa dikonfigurasi langsung ing file konfigurasi layanan.

Nanging, ora kabeh lancar: perpustakaan iki dadi ora fleksibel banget babagan ngenalake modul anyar. Contone, yen sampeyan perlu kanggo nambah sawetara middleware khusus, sampeyan kudu nggawe Déwan anyar lan oleh warisan saka kelas dhasar sing nganggo layanan, kang arang banget trep. Untunge, ora akeh kasus kaya ngono.

Jaman Docker lan Kubernetes

Wektu wis tekan nalika gelombang Docker lan Kubernetes tekan kita, sing diawasi kanthi rapet: sawise kabeh, iku kesempatan sing apik kanggo miwiti luwih maju ing sadawane teknologi, ing .Net Core. Iki tegese kita mbutuhake infrastruktur anyar kanggo mbukak layanan: sawetara perpustakaan wis migrasi saka .Net Framework menyang .Net Standard lan .Net Core praktis tanpa owah-owahan, sawetara kanthi dandan cilik. Nanging sing paling penting aku pengin ngolah maneh fungsi sing ana gandhengane karo layanan peluncuran ing AspNet Core.

Wangsulan: Bab ingkang pisanan kita nimbang iku konsep sing bakal mbusak drawback utama saka versi sadurungé: lack of keluwesan. Mulane, diputusake kanggo nggawe kabeh sistem perpustakaan minangka independen lan modular sabisa lan ngumpulake layanan sing dibutuhake kanggo fungsi minangka konstruktor.

Tujuan utama yaiku nggawe pendekatan terpadu sing nggambarake cara sesambungan karo database, bus lan layanan liyane. Kita nyoba nggawe integrasi kanthi cepet lan ora krasa lara, lan pangembang bisa konsentrasi nulis logika bisnis tinimbang infrastruktur - wis siyap. Repositori umum mbantu nambah pengalaman interaksi ing tim: nalika infrastruktur internal sing meh padha digunakake, luwih gampang gabung karo proses pangembangan tim liyane lan ijol-ijolan keahlian.

Lan kenapa kita butuh Open Source?

Kita pengin nuduhake kadewasan keahlian kita lan nampa umpan balik sing berkualitas tinggi: wong ing njaba bank bakal bisa nggawa apa-apa saka awake dhewe. Kita uga kasengsem ing pangembangan praktik kanggo nggarap microservices lan DDD ing .NET ing industri, mbok menawa ana wong sing pengin njupuk alih bagean tartamtu saka kerangka kasebut.

Bener, ViennaNET

Saiki ayo dideleng kanthi cetha. Kode sumber lengkap dikirim ing kene.

ViennaNET.WebApi.*

Koleksi perpustakaan iki kalebu "root" ViennaNET.WebApi, ngemot kelas pembangun kanggo layanan CompanyHostBuilder, lan sakumpulan konfigurator ViennaNET.WebApi.Configurators.*, sing saben-saben ngidini sampeyan nambah lan ngatur sawetara fungsi menyang sing digawe. layanan. Antarane configurators sampeyan bisa nemokake sambungan kanggo logging, diagnostik, otentikasi lan jinis wewenang, swagger, etc.

ViennaNET.WebApi.Runners.* uga ngemot pembangun layanan sing wis dikonfigurasi. Paket kasebut ngidini sampeyan ora ngelingi saben sampeyan nggawe layanan anyar sing kudu disambungake karo konfigurasi. Nanging, dheweke ora mbatesi fungsi pembangun layanan kanthi cara apa wae.

ViennaNET.Mediator.*

Pustaka sing ngidini sampeyan nggawe bis intermediary internal kanggo printah lan panjalukan ing layanan. Pendekatan iki ngidini sampeyan nyuda jumlah injeksi DI dadi siji, contone, ing pengontrol. Amarga iki, sampeyan bisa nambah macem-macem dekorator kanggo panjaluk, sing nggabungake proses lan nyuda jumlah kode.

ViennaNET.Validasi

Majelis sing ngemot sakumpulan kelas kanggo nggawe aturan validasi lan urutane. Iku trep banget kanggo ngleksanakake validasi domain, amarga ngidini sampeyan njlèntrèhaké saben kondisi bisnis ing wangun aturan prasaja lan kapisah.

ViennaNET.Redis

A perpustakaan karo wrappers kanggo karya trep karo Redis minangka cache ing memori.

ViennaNET.Spesifikasi

Majelis sing ngemot kelas sing ngetrapake pola Spesifikasi.

Iki ora kabeh sing ana ing set kita. Sampeyan bisa ndeleng liyane ing repositori GitHub. Kita ngrencanakake ngeculake perpustakaan kanggo nggarap database menyang OpenSource enggal.

Matur nuwun kanggo manungsa waé, kita ngarep-arep kanggo komentar lan narik panjalukan.

Source: www.habr.com

Add a comment