پہلے دن ہی "سییم" (seam) تیار کریں

زیادہ ڈیٹا (high-volume data) کے لیے پلیٹ فارم بناتے وقت آپ کو ایک انتخاب کرنا پڑتا ہے۔

آپ کو طویل مدتی اسٹوریج کے لیے ایک تیز رفتار ڈیٹا بیس کی ضرورت ہے۔ لیکن پہلے دن ہی ایک پیچیدہ سسٹم ترتیب دینا مشکل ہوتا ہے۔ ہو سکتا ہے کہ آپ کو ابھی اپنے ڈیٹا کے پیٹرنز (patterns) کا بھی علم نہ ہو۔ محفوظ انتخاب وہ معیاری ریلیشنل ڈیٹا بیس (relational database) ہے جسے آپ پہلے ہی استعمال کر رہے ہیں۔

غلطی یہ ہے کہ آپ اپنے کوڈ کو براہ راست اس پہلے ڈیٹا بیس سے جوڑ دیتے ہیں۔ اگر آپ کی ایپ کا ہر حصہ براہ راست ڈیٹا بیس کو کال کرتا ہے، تو آپ ایک جال (trap) بنا رہے ہیں۔ بعد میں کسی بہتر ڈیٹا بیس پر منتقل ہونے کے لیے آپ کو بڑے پیمانے پر ریفیکٹرنگ (refactoring) کرنی پڑے گی۔

صحیح طریقہ یہ ہے کہ ایک "سییم" (seam) بنایا جائے۔

سییم ایک معاہدہ (contract) ہے۔ یہ اس بات کی وضاحت کرتا ہے کہ سسٹم کیا کرتا ہے، بغیر یہ بتائے کہ وہ اسے کیسے کرتا ہے۔

  • کام کے لیے ایک انٹرفیس (interface) بنائیں۔
  • اپنے موجودہ ڈیٹا بیس کو استعمال کرتے ہوئے ایک بنیادی ڈرائیور (driver) لکھیں۔
  • اس ڈرائیور کو انٹرفیس کے ساتھ جوڑ دیں۔

آپ کی ایپ کا ہر دوسرا حصہ صرف انٹرفیس سے بات کرتا ہے۔ کسی کو معلوم نہیں ہوتا کہ پس منظر (background) میں کون سا ڈیٹا بیس چل رہا ہے۔

جب آپ کا ڈیٹا بڑھتا ہے اور آپ کو تیز رفتار سسٹم کی ضرورت ہوتی ہے، تو کام بہت سادہ ہوتا ہے۔ آپ ایک نیا ڈرائیور لکھتے ہیں، کوڈ کی ایک لائن تبدیل کرتے ہیں، اور اسے ریلیز کر دیتے ہیں۔ کوئی ڈیش بورڈ خراب نہیں ہوتا۔ کوئی پائپ لائن (pipeline) نہیں رکتی۔

کچھ لوگ اسے قبل از وقت ایبسٹریکشن (premature abstraction) کہتے ہیں۔ وہ کہتے ہیں کہ آپ کو ابھی اس کی ضرورت نہیں ہے۔

میں اس سے اختلاف کرتا ہوں۔ ایک انٹرفیس کی قیمت صرف ایک اضافی فائل ہے۔ اسے چھوڑنے کا مطلب ہے کہ آپ اس قیمت کو مستقبل کے لیے ٹال رہے ہیں۔ جب آپ کو آخر کار تبدیلی کی ضرورت پڑے گی، تو آپ کو دباؤ میں سینکڑوں فائلوں کو ٹھیک کرنا پڑے گا۔ انٹرفیس ایک سستا بیمہ (insurance) ہے۔

اپنے سییمز (seams) کو مزید مضبوط بنانے کے لیے ان تین عادات کو اپنائیں:

  • دوہرے شناختی نمبر (dual identifiers) استعمال کریں۔ اندرونی ڈیٹا بیس جوائنز (joins) کے لیے تیز رفتار انٹیجرز (integers) استعمال کریں۔ ایسی کسی بھی چیز کے لیے UUIDs استعمال کریں جو آپ کے سسٹم سے باہر جاتی ہے۔ یہ آپ کے ڈیٹا کو محفوظ اور جوائنز کو تیز رکھتا ہے۔

  • مشترکہ ذخیرہ الفاظ (shared vocabulary) کے لیے Enums استعمال کریں۔ اسٹیٹس (statuses) یا شدت (severities) کے لیے بے ترتیب اسٹرنگز (strings) استعمال نہ کریں۔ ایک واحد Enum استعمال کریں تاکہ آپ کی ایپ کا ہر حصہ ایک ہی زبان بولے۔

  • ڈیٹا کے لیے ورژن شدہ اینویلپس (versioned envelopes) استعمال کریں۔ اگر آپ کا سسٹم بہت سے ذرائع سے ڈیٹا وصول کرتا ہے، تو ایک سخت اسکیمہ (strict schema) استعمال کریں۔ صرف نئے فیلڈز شامل کریں۔ نئے ورژن کے بغیر انہیں کبھی ختم یا تبدیل نہ کریں۔ یہ پرانے کلائنٹس کو کام کرنے کے قابل رکھتا ہے جبکہ آپ سسٹم کو بہتر بنا رہے ہوتے ہیں۔

حد (boundary) تلاش کریں۔ اسے ایک معاہدے (contract) کے ساتھ نام دیں۔ اسے ایک سادہ امپلیمنٹیشن (implementation) سے بھر دیں۔

معاہدہ آپ کا وعدہ ہے۔ ڈرائیور صرف وہ طریقہ ہے جس سے آپ آج وہ وعدہ پورا کرتے ہیں۔

ماخذ: https://dev.to/nasrulhazim/build-the-seam-on-day-one-the-second-driver-on-day-ninety-26b