ViennaNET: satu set perpustakaan untuk bahagian belakang

Hello!

Kami adalah komuniti pembangun .NET di Raiffeisenbank dan kami ingin bercakap tentang satu set perpustakaan infrastruktur berdasarkan Teras .NET untuk mencipta perkhidmatan mikro dengan cepat dengan satu ekosistem. Mereka membawanya ke Sumber Terbuka!

ViennaNET: satu set perpustakaan untuk bahagian belakang

Sedikit sejarah

Pada suatu masa dahulu kami mempunyai projek monolitik yang besar, yang secara beransur-ansur bertukar menjadi satu set perkhidmatan mikro (anda boleh membaca tentang ciri-ciri proses ini dalam artikel ini). Dalam proses itu, kami menghadapi masalah apabila mencipta perkhidmatan mikro baharu, kami sering terpaksa menyalin pelbagai penyelesaian infrastruktur - seperti menyediakan pengelogan, bekerja dengan pangkalan data, WCF, dsb. Satu pasukan bekerja pada projek ini, dan semua orang sudah terbiasa dengan beberapa pendekatan yang telah ditetapkan untuk bekerja dengan infrastruktur. Oleh itu, kami mengasingkan kod biasa ke dalam repositori yang berasingan, membungkus perpustakaan yang dikumpul dalam pakej Nuget dan meletakkannya dalam repositori Nuget dalaman kami.

Masa berlalu, projek itu berpecah-belah secara beransur-ansur, dan terdapat keinginan untuk mencipta modul sisi klien baharu pada rangka kerja JS moden dan menjalankannya dalam penyemak imbas. Kami mula beralih daripada WCF/SOAP kepada REST/HTTP, jadi kami memerlukan perpustakaan baharu untuk melancarkan perkhidmatan dengan cepat berdasarkan AspNet WebApi. Versi pertama pada .Net Framework 4.5 telah dibuat oleh arkitek kami hampir melutut pada masa lapangnya, tetapi di luar kotak ia memungkinkan untuk melancarkan perkhidmatan dengan tiga baris dalam Program.cs yang mengandungi kebenaran (NTLM), pengelogan, Swagger, IoC/DI berdasarkan Castle Windsor, pelanggan HTTP tersuai yang memajukan pelbagai pengepala untuk menyediakan pengelogan hujung ke hujung sepanjang keseluruhan projek. Dan keseluruhan perkara ini boleh dikonfigurasikan terus dalam fail konfigurasi perkhidmatan.

Walau bagaimanapun, tidak semuanya berjalan lancar: perpustakaan ini ternyata sangat tidak fleksibel dari segi memperkenalkan modul baharu. Sebagai contoh, jika anda perlu menambah beberapa perisian tengah khas, anda perlu membuat pemasangan baharu dan mewarisi daripada kelas asas yang menjalankan perkhidmatan, yang amat menyusahkan. Nasib baik kes sebegini tidak banyak berlaku.

Era Docker dan Kubernetes

Masanya telah tiba apabila gelombang Docker dan Kubernetes sampai kepada kami, yang kami perhatikan dengan teliti: lagipun, ia adalah peluang yang baik untuk mula bergerak lebih jauh mengikut teknologi, dalam .Net Core. Ini bermakna bahawa kami memerlukan infrastruktur baharu untuk menjalankan perkhidmatan: sesetengah perpustakaan telah berhijrah daripada Rangka Kerja .Net kepada .Net Standard dan .Net Core secara praktikal tanpa perubahan, beberapa dengan peningkatan kecil. Tetapi yang paling penting saya ingin mengolah semula fungsi yang dikaitkan dengan pelancaran perkhidmatan pada AspNet Core.

Perkara pertama yang kami pertimbangkan ialah konsep yang akan menghapuskan kelemahan utama versi sebelumnya: kekurangan fleksibiliti. Oleh itu, telah diputuskan untuk menjadikan keseluruhan sistem perpustakaan sebagai bebas dan modular yang mungkin dan mengumpul perkhidmatan yang diperlukan untuk kefungsian sebagai pembina.

Matlamat utama adalah untuk mencipta pendekatan bersatu yang menerangkan cara berinteraksi dengan pangkalan data, bas dan perkhidmatan lain. Kami cuba membuat penyepaduan cepat dan tidak menyakitkan, dan pembangun boleh menumpukan pada menulis logik perniagaan dan bukannya infrastruktur - ia sudah sedia. Repositori biasa membantu meningkatkan pengalaman interaksi dalam pasukan: apabila infrastruktur dalaman yang hampir serupa digunakan, lebih mudah untuk menyertai proses pembangunan pasukan lain dan bertukar kepakaran.

Dan mengapa kita memerlukan Sumber Terbuka?

Kami ingin menunjukkan kematangan kepakaran kami dan menerima maklum balas berkualiti tinggi: seseorang di luar bank akan dapat membawa sesuatu dari diri mereka sendiri. Kami juga berminat dalam pembangunan amalan untuk bekerja dengan perkhidmatan mikro dan DDD pada .NET dalam industri, mungkin seseorang ingin mengambil alih bahagian tertentu rangka kerja.

Sebenarnya, ViennaNET

Sekarang mari kita lihat lebih dekat. Kod sumber penuh disiarkan di sini.

ViennaNET.WebApi.*

Set perpustakaan ini terdiri daripada "root" ViennaNET.WebApi, yang mengandungi kelas pembina untuk perkhidmatan CompanyHostBuilder dan satu set konfigurator ViennaNET.WebApi.Configurators.*, setiap satunya membolehkan anda menambah dan mengkonfigurasi beberapa fungsi pada yang dicipta. perkhidmatan. Di antara konfigurator anda boleh mencari sambungan untuk pengelogan, diagnostik, jenis pengesahan dan kebenaran, kesombongan, dsb.

ViennaNET.WebApi.Runners.* juga mengandungi pembina perkhidmatan pra-konfigurasi. Pakej ini membolehkan anda tidak mengingati setiap kali anda mencipta perkhidmatan baharu yang mana konfigurator perlu disambungkan. Walau bagaimanapun, mereka tidak mengehadkan kefungsian pembina perkhidmatan dalam apa jua cara.

ViennaNET.Mediator.*

Perpustakaan yang membolehkan anda membuat bas perantara dalaman untuk arahan dan permintaan dalam perkhidmatan. Pendekatan ini membolehkan anda mengurangkan bilangan suntikan DI kepada satu, sebagai contoh, dalam pengawal. Disebabkan ini, anda boleh menambah pelbagai penghias pada permintaan, yang menyatukan pemprosesannya dan mengurangkan jumlah kod.

ViennaNET.Validation

Perhimpunan yang mengandungi set kelas untuk mencipta peraturan pengesahan dan urutan daripadanya. Ia sangat mudah untuk melaksanakan pengesahan domain, kerana ia membolehkan anda menerangkan setiap keadaan perniagaan dalam bentuk peraturan yang mudah dan berasingan.

ViennaNET.Redis

Perpustakaan dengan pembungkus untuk kerja mudah dengan Redis sebagai cache dalam memori.

ViennaNET.Spesifikasi

Perhimpunan yang mengandungi kelas yang melaksanakan corak Spesifikasi.

Ini bukan semua yang ada dalam set kami. Anda boleh melihat yang lain dalam repositori GitHub. Kami merancang untuk mengeluarkan perpustakaan kami untuk bekerja dengan pangkalan data kepada OpenSource tidak lama lagi.

Terima kasih atas perhatian anda, kami menantikan ulasan dan permintaan menarik anda.

Sumber: www.habr.com

Tambah komen