ایف # [2] میں بیئر وینٹینٹڈ پروگرامنگ

تعارف

اس بلاگ پوسٹ میں ، ہم جاری رکھتے ہیں جہاں ہم نے پچھلے بلاگ پوسٹ سے چھوڑا تھا۔ ہم مندرجہ ذیل کرنا چاہتے ہیں:

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

ہم اس سیریز کے تیسرے بلاگ پوسٹ میں Expecto کے استعمال کی جانچ کریں گے اور لاگری کے ذریعے لاگنگ شامل کریں گے۔

تیاریاں

مجھے نوفلسی معاملے کے علاج کے بارے میں اٹلی روڈشاؤگ سے ایک عمدہ اشارہ ملا۔ ہمیں NoDifferences کیس کو کامیابی کی طرح سمجھنا چاہئے۔ اگر کوئی فرق نہیں ملا تو کوئی متن مت بھیجیں۔

ہمارے ترمیم شدہ غلطی کا ماڈیول اب ایسا لگتا ہے:

فنکشن کا موازنہ کریں ، جو اب موجودہ اور پچھلے سکریچ کے مابین فرق کا حساب لگاتا ہے۔

نوٹیفیکیشن فنکشن کو اب یہ طے کرنا ہوگا کہ آیا متن کو بھیجنا چاہئے یا نہیں جو سیٹ فرق کی اہمیت پر مبنی ہے۔

ہم پائپ لائن کو عام کرنے کی سمت کا تعین کرنے کے لئے اپنے ڈیٹا سیٹ میں "نام" کے نام سے ایک نیا "سٹرنگ" ٹائپ عنصر بھی شامل کرتے ہیں ، جسے بعد میں روشنی ڈالی جائے گی۔

ہماری بیئر انفو ڈاٹ ایف ایس فائل فائل کے مطابق جس میں تازہ کاری ریکارڈ کی قسم ہے اور چیرون کیلئے جامد عناصر اب اس کی طرح نظر آتے ہیں۔

ترتیب اور عامی

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

تعمیر

ہم ترتیب کی تمام تفصیلات رکھنے کیلئے ایم ایل لیب کا فری ٹیر استعمال کریں گے۔ پہلے ہم ایک ڈیٹا بیس بناتے ہیں جسے "بیئر وینئیرنٹ پروگرامنگ" کہتے ہیں اور تشکیل کا مجموعہ شامل کرتے ہیں۔ یہ کافی آسان عمل ہونا چاہئے۔ MLab یوزر انٹرفیس بہت اچھا ہے! اگر آپ کو کوئی پریشانی ہو تو بلا جھجھک مجھ سے رابطہ کریں۔

کنفگریشن کلیکشن میں ابتدائی طور پر ہماری ٹوئلیو تفصیلات کے ساتھ ایک دستاویز ہونی چاہئے۔ اگر ہم یہاں مزید فیلڈز شامل کرنا چاہتے ہیں تو ہم بعد میں فیصلہ کرسکتے ہیں۔

ایک بار برقرار رکھنے کے بعد ، ترتیب کا مجموعہ کچھ اس طرح لگتا ہے:

_ "_I will": {$ oid: 5976bcc1734d1d6202aa1556}، "MyPhoneNumber": "آپ کا فون نمبر"، "اکاؤنٹ ایس آئی ڈی": "آپ کا جوڑا کھاتہ" twilio فون نمبر بھیج رہا ہے "}

ڈیٹا بیس کے ساتھ بات چیت

اگلا ، ہم PACKAGE کے ذریعے منگسوشارپریور اور مونگو ڈی بی۔فشار شاخ کا حوالہ شامل کریں۔ اگر آپ کو ایسا کرنے کے بارے میں یقین نہیں ہے تو ، براہ کرم پچھلی پوسٹ کو پڑھیں ، جس میں پیکیج کے استعمال سے متعلق معلومات موجود ہیں ، اور چیک کریں کہ کیا انحصار کامیابی کے ساتھ حوالہ دیا گیا ہے۔

غلطی کے ماڈیول سے پہلے ، ہم ایک نیا ماڈیول "Db" کہتے ہیں جسے "Common.fs" فائل میں بناتے ہیں ، جس میں ہمارے تمام ڈیٹا بیس سے متعلق افعال شامل ہیں۔ اس کے علاوہ ، JSON فائل کے ڈیسیریلائزیشن / سیریلائزیشن کے لئے تمام کوڈ ، جس پر ہم نے موازنہ ماڈیول میں پہلے کام کیا تھا ، کو ہٹا دیا گیا ہے۔

صرف لفظی جو سخت کوڈڈ ہے وہ ہے کنکشن کی تار۔ [اگر آپ تخلیقی بننا چاہتے ہیں تو ، آپ اسے FSharp.Configration لائبریری کا استعمال کرتے ہوئے کنفیگریشن فائل میں رکھ سکتے ہیں۔]

سب کے سب ، Db ماڈیول اس طرح لگتا ہے:

مونگو + ایف # سی آر یو ڈی سے متعلق مزید تفصیلات میرے پچھلے بلاگ پوسٹ میں مل سکتی ہیں ، جو آپ یہاں پاسکتے ہیں۔ اور کنفیگریشن والا ترمیم شدہ الارم ماڈیول اب ایسا لگتا ہے:

عام کرنا

صرف بریوری سے متعلق مخصوص کوڈ بریوری سے متعلق مخصوص پارسر اور مرکزی تقریب فائل میں ہے جس میں بریوری کے لئے پائپ لائن موجود ہوتی ہے۔ ہمیں بریور کے نام کی بنیاد پر Json فائل بنانے کے لئے موازنہ ماڈیول کو تبدیل کرنے کی ضرورت ہے۔

بیئر وینٹینٹڈ پروگرمنگ ماڈیول اب ایسا لگتا ہے:

اور موازنہ ماڈیول میں موازنہ کی تبدیل شدہ تقریب اب کچھ اس طرح دکھائی دیتی ہے۔

منصوبہ ساز

اگلا قدم ایک ٹائمر پر بریوری والی پائپ لائنوں کو چلانے کے لئے ایک شیڈولر مرتب کرنا ہے۔ اس کے لئے ہم کوکیز ڈاٹ نیٹ کو پیکج کے ذریعے منصوبہ بندی کے لئے ڈاؤن لوڈ کرتے ہیں۔

اس ایف # ٹکڑوں کے بعد ، ہم آسانی سے تمام بریوریوں سے گزرنے کے لئے منصوبہ بند عمل مرتب کرسکتے ہیں اور ہر 2 سیکنڈ کے لئے ہمیشہ کے لئے تفصیلات کا تجزیہ کرسکتے ہیں۔

ہم اپنے بیئر کی خریداری کے بارے میں دلچسپی نہیں رکھتے ، بلکہ یہ عمل کرتے ہیں کہ کمپنی کی سطح پر بیئر کو بازوکا مل جاتا ہے۔

مستقل خروںچ

آخر میں ، آئیے "بیئر وینئینٹڈ پروگرامنگ" کے ذریعہ اسی اسکریپس کو اسی مونگڈب ڈیٹا بیس میں محفوظ کرنے کا امکان شامل کریں۔

اسی وجہ سے کہ ہم اپنے عمل کو عام بناتے ہیں تاکہ دوسرے بریوری پرسروں کو آسانی سے شامل کیا جاسکے ، ہم JSON سیریلائزیشن کو ہٹانے کے بعد بریوری کے نام پر مبنی ڈیٹا بیس کے ذخیرے کا نام دیں گے اور فائل کے اندر اور باہر خارج کرنے کے بعد ہے.

سب سے پہلے ، بیئر انفو ریکارڈ کی قسم کو چیک کرکے اور Chiron پر مبنی مستحکم عناصر کو ختم کرنے کے بعد BsonObjectId مونگو ڈی بی ID شامل کرکے JSON کے تمام پرانے سیرائلائزیشن اور ڈیسیریلائزیشن کے اجزاء کو ہٹا دیں۔

نیا بیئر انفو ماڈیول ایسا لگتا ہے:

اگر آپ نے نوٹ کیا تو ، ہم نے C # مونگو ڈی بی ڈرائیور سے ملنے کے لئے FSharp کی فہرست سے "ایک" میں "بیئر" کی قسم تبدیل کر کے "ایک" سے "سسٹم۔ جنرک.کولیکشن" کر دی جس پر ایف # ون بنایا گیا تھا۔

اب ہم چیرون کے حوالہ کو دور کردیں گے کیونکہ اب ہمیں ضرورت نہیں ہے۔ اس کے ل، ، کمانڈ پیلیٹ کھولیں [Cmd + Shift + P] اور ، fsproj فائل کھولنے کے بعد ، پاکٹ کے معزول حوالہ پر مندرجہ ذیل پر جائیں:

ایک بار جب چیرون کا حوالہ ختم ہوجاتا ہے ، تو ہم اپنے Db ماڈیول میں کچھ طریقے شامل کریں گے جو نئی IDs بنانے اور پچھلا سکریپ حاصل کرنے سے متعلق ہوں۔

اگر بریوری کے نام کے ساتھ جمع کرنے کی کوشش کرتے وقت کوئی رعایت پیدا ہوتی ہے تو ، اسے بلاک والے حصے میں دوبارہ تخلیق کرنے کی کوشش کی جاتی ہے۔

ہم نے آخری سکریپ پکڑ کر سکریپیس کو موازنہ ماڈیول سے ڈی بی ماڈیول تک رکھنے کی پیچیدگی کو کم کردیا ہے۔ ہم جانچتے ہیں کہ آیا آخری کھرچنا کالعدم ہے [اس چیز کو تبدیل کرنے کے بعد جب اسے فرسٹ او آر ڈیفالٹ ()] استعمال کرتے ہیں تو nullability چیک کرنے کیلئے اسے کسی شے میں تبدیل کیا جاتا ہے۔

ہمارا تازہ کاری شدہ تھکا ہوا ہینڈس اسکراپر سکریپ فنکشن اب ایسا ہی لگتا ہے۔

getBeerNamesFromTiredHands فنکشن اس طرح لگتا ہے:

اس کے علاوہ ، ہمارے موازنہ ماڈیول کو نمایاں طور پر آسان بنایا گیا ہے:

یہ بہت اچھا ہے کہ ہمارے سکریپس برقرار ہیں ، جس کی تصدیق تھائیر ہینڈز کلیکشن میں ہماری دستاویزات کی جانچ کرکے کی جاسکتی ہے۔

نتیجہ اخذ کرنا

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

میں آپ کی رائے موصول کرنے پر ہمیشہ خوش ہوں!