ViennaNET: susunan perpustakaan pikeun backend nu

Hello dulur!

Kami komunitas pamekar .NET di Raiffeisenbank sarta kami hoyong ngobrol ngeunaan susunan perpustakaan infrastruktur dumasar kana .NET Core pikeun gancang nyieun microservices kalawan ékosistem tunggal. Aranjeunna dibawa ka Open Source!

ViennaNET: susunan perpustakaan pikeun backend nu

A sajarah saeutik

Sakali waktos urang ngagaduhan proyék monolitik anu ageung, anu laun-laun janten sakumpulan microservices (anjeun tiasa maca ngeunaan fitur prosés ieu dina artikel ieu). Dina prosésna, urang mendakan masalah nalika nyiptakeun microservices énggal, urang sering kedah nyalin sababaraha solusi infrastruktur - sapertos nyetél logging, damel sareng database, WCF, jsb. Hiji tim damel dina proyék ieu, sareng sadayana parantos biasa kana sababaraha pendekatan anu mapan pikeun damel sareng infrastruktur. Kituna, urang misahkeun kodeu umum kana gudang misah, dibungkus perpustakaan dikumpulkeun dina bungkusan Nuget sarta nempatkeun aranjeunna dina gudang Nuget internal urang.

Waktos kaliwat, proyék nu laun fragmented, sarta aya kahayang pikeun nyieun modul klien-sisi anyar dina kerangka JS modern tur ngajalankeun aranjeunna dina browser nu. Urang mimitian pindah ti WCF/SOAP ka REST/HTTP, jadi urang diperlukeun perpustakaan anyar pikeun gancang ngajalankeun jasa dumasar kana AspNet WebApi. Versi munggaran dina .Net Framework 4.5 dijieun ku arsiték urang ampir dina tuur na dina waktu luang-Na, tapi out of the box eta ngamungkinkeun pikeun ngajalankeun layanan kalayan tilu garis dina Program.cs nu ngandung otorisasina (NTLM), logging, Swagger, IoC / DI dumasar kana Castle Windsor, klien HTTP ngaropéa nu neraskeun rupa headers nyadiakeun tungtung-to-tungtung logging sapanjang sakabéh proyék. Sarta sakabeh hal ieu bisa salajengna ngonpigurasi langsung dina file konfigurasi jasa.

Nanging, henteu sadayana lancar: perpustakaan ieu tétéla henteu fleksibel dina hal ngenalkeun modul énggal. Contona, upami anjeun peryogi pikeun nambahkeun sababaraha middleware husus, anjeun kudu nyieun hiji assembly anyar jeung inherit ti kelas dasar nu ngajalankeun jasa, nu éta pisan pikaresepeun. Untungna, henteu seueur pisan kasus sapertos kitu.

Jaman Docker sareng Kubernetes

Waktosna parantos sumping nalika gelombang Docker sareng Kubernetes dugi ka kami, anu ku urang diawaskeun sacara saksama: barina ogé, éta mangrupikeun kasempetan anu saé pikeun ngamimitian langkung maju dina téknologi, dina .Net Core. Ieu ngandung harti yén urang bakal butuh infrastruktur anyar pikeun ngajalankeun jasa: sababaraha perpustakaan geus hijrah ti .Net Framework ka .Net Standard jeung .Net Core praktis tanpa parobahan, sababaraha kalawan perbaikan minor. Tapi anu paling kuring hoyong ngerjakeun deui fungsionalitas anu aya hubunganana sareng peluncuran jasa dina AspNet Core.

Hal kahiji anu kami anggap nyaéta konsép anu bakal ngaleungitkeun kalemahan utama versi sateuacana: kurangna kalenturan. Ku alatan éta, éta mutuskeun sangkan sakabéh sistem perpustakaan salaku bebas sarta modular-gancang sarta ngumpulkeun jasa dipikabutuh pikeun fungsionalitas salaku constructor a.

Tujuan utama nya éta nyieun pendekatan terpadu nu ngajelaskeun kumaha carana berinteraksi sareng database, beus jeung jasa lianna. Kami nyobian ngadamel integrasi gancang sareng henteu aya rasa nyeri, sareng pamekar tiasa konsentrasi dina nyerat logika bisnis tinimbang infrastruktur - éta parantos siap. Repositori umum ngabantosan ningkatkeun pangalaman interaksi dina tim: nalika infrastruktur internal anu sami dianggo, langkung gampang gabung dina prosés pangembangan tim sanés sareng tukeur kaahlian.

Sareng naha urang peryogi Open Source?

Kami hoyong nunjukkeun kadewasaan kaahlian urang sareng nampi tanggapan kualitas luhur: jalma di luar bank bakal tiasa nyandak hal-hal sorangan. Kami ogé kabetot dina ngembangkeun prakték pikeun gawé bareng microservices na DDD on .NET di industri, sugan batur bakal hoyong nyandak leuwih bagian nu tangtu kerangka.

Sabenerna, ViennaNET

Ayeuna hayu urang nempo leuwih deukeut. Kodeu sumber lengkep dipasang di dieu.

ViennaNET.WebApi.*

Kumpulan perpustakaan ieu diwangun ku "root" ViennaNET.WebApi, ngandung kelas pembina pikeun layanan CompanyHostBuilder, sarta sakumpulan configurators ViennaNET.WebApi.Configurators.*, nu masing-masing ngidinan Anjeun pikeun nambahkeun jeung ngonpigurasikeun sababaraha pungsi ka dijieun. palayanan. Diantara konfigurator anjeun tiasa mendakan sambungan pikeun logging, diagnostik, auténtikasi sareng jinis otorisasi, swagger, jsb.

ViennaNET.WebApi.Runners.* ogé ngandung tukang jasa anu tos dikonpigurasikeun. Bungkusan ieu ngamungkinkeun anjeun henteu émut unggal waktos anjeun nyiptakeun jasa énggal anu kedah dihubungkeun ku konfigurator. Nanging, aranjeunna henteu ngabatesan fungsionalitas pembina jasa dina cara naon waé.

ViennaNET.Mediator.*

Perpustakaan anu ngamungkinkeun anjeun nyiptakeun beus perantara internal pikeun paréntah sareng pamundut dina jasa. Pendekatan ieu ngamungkinkeun anjeun ngirangan jumlah suntikan DI ka hiji, contona, dina pangendali. Kusabab ieu, anjeun tiasa nambihan rupa-rupa dekorator kana pamundut, anu ngahijikeun pamrosésanna sareng ngirangan jumlah kode.

ViennaNET.Validasi

Majelis anu ngandung sakumpulan kelas pikeun nyiptakeun aturan validasi sareng sekuen ti aranjeunna. Hal ieu kacida merenah pikeun ngalaksanakeun validasi domain, sabab ngidinan Anjeun pikeun ngajelaskeun unggal kaayaan bisnis dina bentuk aturan basajan tur misah.

ViennaNET.Redis

A perpustakaan kalawan wrappers pikeun gawé merenah kalawan Redis salaku cache dina-memori.

ViennaNET.Spésifikasi

Majelis anu ngandung kelas anu ngalaksanakeun pola spésifikasi.

Ieu sanés sadayana anu aya dina set kami. Anjeun tiasa ningali sésana dina gudang GitHub. Kami ngarencanakeun ngaleupaskeun perpustakaan kami pikeun damel sareng database ka OpenSource pas.

Hatur nuhun kana perhatian anjeun, kami kasampak maju ka komentar anjeun sarta narik requests.

sumber: www.habr.com

Tambahkeun komentar