اپنی کوڈ بیس کو ایک آئین دیں
لوگوں کے ذہنوں میں موجود آرکیٹیکچر کوڈنگ ایجنٹس کے سامنے برقرار نہیں رہ سکتا۔
برسوں تک، کوڈ بیس کے اصول محض "قبائلی علم" (tribal knowledge) کی صورت میں رہے ہیں۔ سینئر انجینئرز جانتے تھے کہ کون سے لیئرز (layers) ایک دوسرے سے بات کر سکتے ہیں۔ وہ جانتے تھے کہ کون سی ڈیپینڈنسیز (dependencies) ممنوع ہیں۔ نئے انجینئرز چیزیں خراب کر کے اور ریویوز (reviews) میں اصلاح پا کر سیکھتے تھے۔
یہ انسانوں کے لیے کام کرتا ہے کیونکہ انسان وقت کے ساتھ سیاق و سباق (context) بناتے ہیں۔ ایجنٹس سیاق و سباق نہیں بناتے۔ وہ صرف وہی جانتے ہیں جو وہ دیکھ سکتے ہیں۔
اگر کوئی اصول لکھا ہوا نہ ہو، تو ایجنٹ سمجھتا ہے کہ وہ اصول موجود ہی نہیں ہے۔ میں نے ایجنٹس کو اندرونی لیئرز کو بیرونی لیئرز سے جوڑتے ہوئے دیکھا ہے۔ وہ ایسی ڈیپینڈنسیز متعارف کرواتے ہیں جن سے ہم نے خاص طور پر بچنا چاہا تھا۔ کوڈ تو کام کرتا ہے، لیکن آرکیٹیکچر بکھر جاتا ہے۔
آپ کو اپنے آرکیٹیکچر کو لوک داستانوں (folklore) سے نکال کر قانون میں بدلنا ہوگا۔
آئین دستاویز سازی (documentation) نہیں ہے۔ دستاویز سازی یہ بتاتی ہے کہ آج ایک سسٹم کیسے کام کرتا ہے۔ آئین یہ طے کرتا ہے کہ ایک سسٹم کو کیا بننے کی اجازت ہے۔
آپ کے آئین کو ان چیزوں پر توجہ مرکوز کرنی چاہیے جو بڑے ریفیکٹر (refactor) کے بعد بھی برقرار رہیں۔ اس میں شامل ہونا چاہیے:
- قوانین اور انویریئنٹ (invariants)
- سسٹم کی حدود (system boundaries)
- بنیادی مفروضے (foundational assumptions)
بہترین آئین مختصر، پابند کرنے والے اور تبدیلی میں سست ہوتے ہیں۔
آرکیٹیکچر کو ڈائریکٹری اسٹرکچر (directory structures) سے نہ جوڑیں۔ ڈائریکٹریز بدل جاتی ہیں۔ آرکیٹیکچر کو ذمہ داریوں (responsibilities) سے جوڑیں۔ ایک ڈومین ماڈل (domain model) اس کے فولڈر سے قطع نظر، ایک ڈومین ماڈل ہی رہتا ہے۔
ہر قانون کے پیچھے ایک وجہ ہونی چاہیے۔ بغیر منطق کے اصول اسے سمجھنے والے کسی شخص کے ذریعے حذف کر دیا جاتا ہے۔ اصول رویہ سکھاتا ہے۔ وجہ فیصلہ سازی (judgment) سکھاتی ہے۔
سب سے اہم بات یہ ہے کہ آپ کو اپنے قوانین پر عمل درآمد کروانا ہوگا۔
ہدایات صرف رہنمائی ہوتی ہیں۔ عمل درآمد حقیقت ہے۔ کوئی ایجنٹ یا انسان آخر کار تحریری ہدایت کو نظر انداز کر دے گا۔
اگر کوئی اصول اہم ہے، تو صرف نثر (prose) پر بھروسہ نہ کریں۔ اسے اپنے CI میں ڈالیں۔ اسے ایک لینٹر (linter) میں ڈالیں۔ اسے ایک ویلیڈیٹر (validator) میں ڈالیں۔
ہر اہم اصول کے دو طریقے ہونے چاہئیں:
- انسانی ورژن: یہ مقصد کی وضاحت کرتا ہے۔
- مشین ورژن: یہ تعمیل (compliance) کی ضمانت دیتا ہے۔
یہ عمل (process) بڑھانے کے بارے میں نہیں ہے۔ یہ اثر و رسوخ (leverage) بڑھانے کے بارے میں ہے۔ جب آرکیٹیکچر پر عمل درآمد ممکن ہو، تو آپ کو ہر فیصلے کا معائنہ کرنے کی ضرورت نہیں پڑتی۔ مشین یہ آپ کے لیے کر دیتی ہے۔
جب آپ حدود پر بھروسہ کر سکتے ہیں، تو آپ زیادہ کام تفویض (delegate) کر سکتے ہیں۔
آغاز کیسے کریں:
اپنے ریویوز پر توجہ دیں۔ جب بھی آپ کہتے ہیں کہ "ہم ایسا اس لیے نہیں کرتے کیونکہ،" تو آپ نے ایک قانون پا لیا ہے۔
چند اصولوں سے شروع کریں:
- ڈیپینڈنسی کی سمت (Dependency direction)
- سیکرٹ ہینڈلنگ (Secret handling)
- اہم معاہدے (Critical contracts)
- حدود کی ملکیت (Boundary ownership)
اصول لکھیں۔ وجہ لکھیں۔ پھر وہ کوڈ چیک شامل کریں جو اسے توڑنا ناممکن بنا دے۔
نفاذ کے بغیر قانون محض ایک مشورہ ہے۔
ماخذ: https://dev.to/miteshethos/give-your-codebase-a-constitution-3k4h
اختیاری تعلیمی کمیونٹی: https://t.me/GyaanSetuAi