ViennaNET: بیک اینڈ کے لیے لائبریریوں کا ایک سیٹ

ہر کسی کو خوش!

ہم Raiffeisenbank میں .NET ڈویلپرز کی ایک کمیونٹی ہیں اور ہم .NET کور پر مبنی انفراسٹرکچر لائبریریوں کے ایک سیٹ کے بارے میں بات کرنا چاہتے ہیں تاکہ ایک ایکو سسٹم کے ساتھ مائیکرو سروسز کو تیزی سے بنایا جا سکے۔ وہ اسے اوپن سورس پر لے آئے!

ViennaNET: بیک اینڈ کے لیے لائبریریوں کا ایک سیٹ

تاریخ کا ایک تھوڑا سا

ایک زمانے میں ہمارے پاس ایک بڑا یک سنگی منصوبہ تھا، جو آہستہ آہستہ مائیکرو سروسز کے ایک سیٹ میں تبدیل ہو گیا (آپ اس عمل کی خصوصیات کے بارے میں پڑھ سکتے ہیں یہ مضمون)۔ اس عمل میں، ہمیں اس مسئلے کا سامنا کرنا پڑا کہ نئی مائیکرو سروسز بناتے وقت، ہمیں اکثر انفراسٹرکچر کے مختلف حل کاپی کرنے پڑتے تھے - جیسے لاگنگ ترتیب دینا، ڈیٹا بیس کے ساتھ کام کرنا، WCF وغیرہ۔ ایک ٹیم نے اس پروجیکٹ پر کام کیا، اور ہر کوئی پہلے سے ہی بنیادی ڈھانچے کے ساتھ کام کرنے کے لیے کچھ قائم شدہ نقطہ نظر کا عادی تھا۔ لہذا، ہم نے مشترکہ کوڈ کو ایک الگ ذخیرہ میں الگ کیا، جمع شدہ لائبریریوں کو Nuget پیکجوں میں لپیٹ کر اپنے اندرونی Nuget ذخیرہ میں رکھا۔

وقت گزرتا گیا، پروجیکٹ آہستہ آہستہ بکھرتا گیا، اور جدید JS فریم ورک پر نئے کلائنٹ سائیڈ ماڈیول بنانے اور انہیں براؤزر میں چلانے کی خواہش پیدا ہوئی۔ ہم نے WCF/SOAP سے REST/HTTP کی طرف جانا شروع کیا، لہذا ہمیں AspNet WebApi پر مبنی خدمات کو تیزی سے شروع کرنے کے لیے نئی لائبریریوں کی ضرورت ہے۔ .Net Framework 4.5 کا پہلا ورژن ہمارے معمار نے اپنے فارغ وقت میں تقریباً گھٹنوں کے بل بنایا تھا، لیکن اس نے Program.cs میں تین لائنوں کے ساتھ ایک سروس شروع کرنا ممکن بنایا جس میں اجازت (NTLM)، لاگنگ، سویگر، کیسل ونڈسر پر مبنی IoC/DI، حسب ضرورت HTTP کلائنٹس جو پورے پروجیکٹ میں اینڈ ٹو اینڈ لاگنگ فراہم کرنے کے لیے مختلف ہیڈرز کو آگے بھیجتے ہیں۔ اور اس ساری چیز کو براہ راست سروس کنفیگریشن فائل میں مزید کنفیگر کیا جا سکتا ہے۔

تاہم، سب کچھ ہموار نہیں تھا: یہ لائبریری نئے ماڈیولز متعارف کرانے کے معاملے میں انتہائی پیچیدہ ثابت ہوئی۔ مثال کے طور پر، اگر آپ کو کچھ خاص مڈل ویئر شامل کرنے کی ضرورت ہے، تو آپ کو ایک نئی اسمبلی بنانی ہوگی اور سروس چلانے والی بیس کلاس سے وراثت حاصل کرنی ہوگی، جو کہ انتہائی تکلیف دہ تھی۔ خوش قسمتی سے، ایسے بہت سے معاملات نہیں تھے۔

ڈوکر اور کبرنیٹس کا دور

وہ وقت آ گیا ہے جب Docker اور Kubernetes کی لہر ہم تک پہنچی، جسے ہم نے قریب سے دیکھا: آخر کار، یہ .Net Core میں ٹیکنالوجیز کے ساتھ ساتھ آگے بڑھنا شروع کرنے کا ایک بہترین موقع تھا۔ اس کا مطلب ہے کہ ہمیں خدمات کو چلانے کے لیے ایک نئے انفراسٹرکچر کی ضرورت ہوگی: کچھ لائبریریاں .Net Framework سے .Net Standard اور .Net Core پر عملاً تبدیلیوں کے بغیر منتقل ہو گئی ہیں، کچھ معمولی بہتری کے ساتھ۔ لیکن سب سے زیادہ میں AspNet Core پر خدمات شروع کرنے سے وابستہ فعالیت کو دوبارہ کام کرنا چاہتا تھا۔

پہلی چیز جس پر ہم نے غور کیا وہ ایک تصور تھا جو پچھلے ورژن کی بنیادی خرابی کو دور کرے گا: لچک کی کمی۔ لہذا، یہ فیصلہ کیا گیا کہ لائبریری کے پورے نظام کو ہر ممکن حد تک آزاد اور ماڈیولر بنایا جائے اور ایک کنسٹرکٹر کے طور پر فعالیت کے لیے ضروری خدمات کو جمع کیا جائے۔

بنیادی مقصد ایک متحد نقطہ نظر بنانا ہے جو بیان کرتا ہے کہ ڈیٹا بیس، بسوں اور دیگر خدمات کے ساتھ کیسے تعامل کیا جائے۔ ہم نے انضمام کو تیز اور تکلیف دہ بنانے کی کوشش کی، اور ڈویلپر بنیادی ڈھانچے کے بجائے کاروباری منطق لکھنے پر توجہ دے سکتے ہیں - یہ پہلے ہی تیار ہے۔ ایک مشترکہ ذخیرہ ٹیموں کے درمیان تعامل کے تجربے کو بہتر بنانے میں مدد کرتا ہے: جب بہت ہی ملتے جلتے اندرونی انفراسٹرکچر استعمال کیے جاتے ہیں، تو دوسری ٹیم کے ترقیاتی عمل میں شامل ہونا اور مہارت کا تبادلہ کرنا آسان ہوتا ہے۔

اور ہمیں اوپن سورس کی ضرورت کیوں ہے؟

ہم اپنی مہارت کی پختگی کو ظاہر کرنا چاہتے ہیں اور اعلی معیار کے تاثرات حاصل کرنا چاہتے ہیں: بینک سے باہر کوئی شخص خود سے کچھ لے کر آئے گا۔ ہم صنعت میں .NET پر مائیکرو سروسز اور DDD کے ساتھ کام کرنے کے طریقوں کی ترقی میں بھی دلچسپی رکھتے ہیں؛ شاید کوئی فریم ورک کے کچھ حصوں پر قبضہ کرنا چاہے گا۔

دراصل، ViennaNET

اب ایک قریبی نظر ڈالتے ہیں۔ مکمل سورس کوڈ یہاں پوسٹ کیا گیا ہے۔.

ViennaNET.WebApi۔*

لائبریریوں کا یہ سیٹ "روٹ" ViennaNET.WebApi پر مشتمل ہے، جس میں CompanyHostBuilder سروس کے لیے بلڈر کلاس، اور ViennaNET.WebApi.Configurators کے کنفیگریٹروں کا ایک سیٹ شامل ہے۔ سروس کنفیگریٹروں کے درمیان آپ لاگنگ، تشخیص، تصدیق اور اجازت کی اقسام، swagger وغیرہ کے لیے کنکشن تلاش کر سکتے ہیں۔

ViennaNET.WebApi.Runners.* میں پہلے سے تشکیل شدہ سروس بلڈرز بھی شامل ہیں۔ یہ پیکجز آپ کو ہر بار یاد رکھنے کی اجازت دیتے ہیں جب آپ کوئی نئی سروس بناتے ہیں جس کے کنفیگریٹروں کو منسلک کرنے کی ضرورت ہوتی ہے۔ تاہم، وہ کسی بھی طرح سے سروس بلڈر کی فعالیت کو محدود نہیں کرتے ہیں۔

ViennaNET.Mediator*

لائبریریاں جو آپ کو سروس کے اندر کمانڈز اور درخواستوں کے لیے ایک انٹرمیڈیری بس بنانے کی اجازت دیتی ہیں۔ یہ نقطہ نظر آپ کو DI انجیکشن کی تعداد کو ایک تک کم کرنے کی اجازت دیتا ہے، مثال کے طور پر، کنٹرولرز میں۔ اس کی وجہ سے، آپ درخواستوں میں مختلف ڈیکوریٹروں کو شامل کر سکتے ہیں، جو ان کی پروسیسنگ کو یکجا کرتا ہے اور کوڈ کی مقدار کو کم کرتا ہے۔

ViennaNET.Validation

ایک اسمبلی جس میں توثیق کے قواعد اور ان سے ترتیب بنانے کے لیے کلاسوں کا ایک سیٹ ہوتا ہے۔ ڈومین کی توثیق کو لاگو کرنے کے لیے یہ بہت آسان ہے، کیونکہ یہ آپ کو ہر کاروباری حالت کو ایک سادہ اور الگ اصول کی شکل میں بیان کرنے کی اجازت دیتا ہے۔

ViennaNET.Redis

ریڈیس کے ساتھ ان میموری کیشے کے طور پر آسان کام کے لیے ریپرز والی لائبریری۔

ViennaNET.Specifications

ایک اسمبلی جس میں کلاسز شامل ہیں جو تصریح کے پیٹرن کو نافذ کرتی ہیں۔

یہ سب کچھ ہمارے سیٹ میں نہیں ہے۔ باقی آپ دیکھ سکتے ہیں۔ GitHub ذخیرے میں. ہم جلد ہی اوپن سورس پر ڈیٹا بیس کے ساتھ کام کرنے کے لیے اپنی لائبریریوں کو جاری کرنے کا منصوبہ بنا رہے ہیں۔

آپ کی توجہ کا شکریہ، ہم آپ کے تبصروں اور درخواستوں کے منتظر ہیں۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں