ViennaNET: مجموعه ای از کتابخانه ها برای باطن

خوش آمدید!

ما جامعه ای از توسعه دهندگان دات نت در Raiffeisenbank هستیم و می خواهیم در مورد مجموعه ای از کتابخانه های زیرساخت مبتنی بر NET Core برای ایجاد سریع میکروسرویس ها با یک اکوسیستم صحبت کنیم. آن را به منبع باز آوردند!

ViennaNET: مجموعه ای از کتابخانه ها برای باطن

کمی از تاریخ

روزی روزگاری ما یک پروژه بزرگ یکپارچه داشتیم که به تدریج به مجموعه ای از میکروسرویس ها تبدیل شد (در مورد ویژگی های این فرآیند می توانید در این مقاله). در این فرآیند، با این مشکل مواجه شدیم که هنگام ایجاد میکروسرویس‌های جدید، اغلب مجبور بودیم راه‌حل‌های زیرساختی مختلفی را کپی کنیم - مانند راه‌اندازی ورود، کار با پایگاه داده، WCF و غیره. یک تیم روی این پروژه کار کرد، و همه از قبل به یک رویکرد ثابت برای کار با زیرساخت ها عادت داشتند. بنابراین، کد مشترک را در یک مخزن جداگانه جدا کردیم، کتابخانه های جمع آوری شده را در بسته های Nuget قرار دادیم و آنها را در مخزن داخلی Nuget خود قرار دادیم.

زمان گذشت، پروژه به تدریج تکه تکه شد و میل به ایجاد ماژول های سمت مشتری جدید بر روی یک چارچوب مدرن JS و اجرای آنها در مرورگر وجود داشت. ما حرکت از WCF/SOAP به REST/HTTP را شروع کردیم، بنابراین به کتابخانه‌های جدیدی برای راه‌اندازی سریع خدمات مبتنی بر AspNet WebApi نیاز داشتیم. اولین نسخه در. logging، Swagger، IoC/DI بر اساس Castle Windsor، کلاینت های HTTP سفارشی شده که سرصفحه های مختلف را برای ارائه گزارش گیری سرتاسر در کل پروژه ارسال می کند. و کل این چیز را می توان مستقیماً در فایل پیکربندی سرویس پیکربندی کرد.

با این حال، همه چیز صاف نبود: این کتابخانه از نظر معرفی ماژول های جدید بسیار انعطاف ناپذیر بود. به عنوان مثال، اگر نیاز به اضافه کردن میان‌افزار خاصی داشتید، باید یک اسمبلی جدید ایجاد می‌کردید و از کلاس پایه که سرویس را اجرا می‌کند، ارث می‌بردید، که بسیار ناخوشایند بود. خوشبختانه چنین مواردی زیاد نبود.

دوران داکر و کوبرنتس

زمان آن فرا رسیده است که موج Docker و Kubernetes به ما رسید، که ما از نزدیک آن را تماشا کردیم: هر چه باشد، این یک فرصت عالی برای شروع حرکت بیشتر در امتداد فناوری‌ها، در Net Core بود. این بدان معناست که ما به یک زیرساخت جدید برای اجرای خدمات نیاز خواهیم داشت: برخی از کتابخانه ها از .Net Framework به .Net Standard و .Net Core عملاً بدون تغییر، برخی با پیشرفت های جزئی، مهاجرت کرده اند. اما بیشتر از همه می‌خواستم عملکردهای مرتبط با راه‌اندازی خدمات در AspNet Core را دوباره کار کنم.

اولین چیزی که در نظر گرفتیم مفهومی بود که ایراد اصلی نسخه قبلی را برطرف می کرد: عدم انعطاف پذیری. بنابراین، تصمیم گرفته شد تا کل سیستم کتابخانه تا حد امکان مستقل و مدولار شود و خدمات لازم برای عملکرد به عنوان سازنده جمع آوری شود.

هدف اصلی ایجاد یک رویکرد واحد است که نحوه تعامل با پایگاه‌های داده، اتوبوس‌ها و سایر خدمات را شرح می‌دهد. ما سعی کردیم ادغام‌ها را سریع و بدون دردسر کنیم، و توسعه‌دهندگان می‌توانند به جای زیرساخت، روی نوشتن منطق کسب‌وکار تمرکز کنند - این در حال حاضر آماده است. یک مخزن مشترک به بهبود تجربه تعامل در تیم ها کمک می کند: وقتی از زیرساخت های داخلی بسیار مشابه استفاده می شود، پیوستن به روند توسعه تیم دیگری و تبادل تخصص آسان تر است.

و چرا به منبع باز نیاز داریم؟

ما می خواهیم بلوغ تخصص خود را نشان دهیم و بازخورد باکیفیت دریافت کنیم: فردی خارج از بانک می تواند چیزی از خود بیاورد. ما همچنین به توسعه روش‌هایی برای کار با میکروسرویس‌ها و DDD در دات‌نت در صنعت علاقه‌مندیم؛ شاید کسی بخواهد بخش‌های خاصی از چارچوب را در اختیار بگیرد.

در واقع، ViennaNET

حالا بیایید نگاه دقیق تری بیندازیم. کد منبع کامل در اینجا ارسال شده است.

ViennaNET.WebApi.*

این مجموعه از کتابخانه‌ها شامل «ریشه» ViennaNET.WebApi، شامل کلاس سازنده برای سرویس CompanyHostBuilder، و مجموعه‌ای از پیکربندی‌کننده‌ها ViennaNET.WebApi.Configurators.* است، که هر کدام به شما اجازه می‌دهند تا برخی از عملکردها را به موارد ایجاد شده اضافه و پیکربندی کنید. سرویس. در میان پیکربندی‌کننده‌ها می‌توانید اتصالاتی را برای ورود به سیستم، تشخیص، تأیید هویت و انواع مجوز، swagger و غیره پیدا کنید.

ViennaNET.WebApi.Runners.* همچنین شامل سازندگان سرویس از پیش پیکربندی شده است. این بسته‌ها به شما امکان می‌دهند هر بار که سرویس جدیدی ایجاد می‌کنید که پیکربندی‌کننده‌ها باید متصل شوند، به خاطر بسپارید. با این حال، آنها به هیچ وجه عملکرد سازنده سرویس را محدود نمی کنند.

ViennaNET.Mediator.*

کتابخانه‌هایی که به شما امکان می‌دهند یک گذرگاه واسطه داخلی برای دستورات و درخواست‌ها در یک سرویس ایجاد کنید. این رویکرد به شما امکان می دهد تعداد تزریقات DI را به یک مثلاً در کنترلرها کاهش دهید. به همین دلیل، می توانید دکوراتورهای مختلفی را به درخواست ها اضافه کنید که پردازش آنها را یکسان می کند و مقدار کد را کاهش می دهد.

ViennaNET.Validation

اسمبلی حاوی مجموعه ای از کلاس ها برای ایجاد قوانین اعتبار سنجی و توالی از آنها. برای اجرای اعتبار سنجی دامنه بسیار راحت است، زیرا به شما امکان می دهد هر شرایط تجاری را در قالب یک قانون ساده و مجزا توصیف کنید.

ViennaNET.Redis

یک کتابخانه با بسته‌بندی‌ها برای کار راحت با Redis به‌عنوان یک کش در حافظه.

ViennaNET.مشخصات

یک اسمبلی حاوی کلاس هایی که الگوی Specification را پیاده سازی می کنند.

این تمام چیزی نیست که در مجموعه ما وجود دارد. بقیه رو میتونید ببینید در مخزن GitHub. ما در حال برنامه ریزی هستیم که به زودی کتابخانه های خود را برای کار با پایگاه های داده در OpenSource منتشر کنیم.

با تشکر از توجه شما، ما مشتاقانه منتظر نظرات و درخواست های شما هستیم.

منبع: www.habr.com

اضافه کردن نظر