يجد البشر صعوبة في رؤية الصورة الكبيرة للمشكلة دون تكريس الكثير من الوقت والجهد. يحدث هذا بشكل خاص أثناء العمل مع التطبيقات الكبيرة والمعقدة. ما هي الآثار الجانبية للتغييرات التي أجريتها؟ لماذا يؤثر هذا السطر هنا على اختبارات جزء بعيد من قاعدة التعليمات البرمجية؟ لا يوجد حل مثالي أو كامل للمشكلة، لكن Shopify خرجت بأداة ربما تساعدك أنت وفريقك.
مقدمة
من أجل التحدث عن باكويرك، نحتاج إلى تقديم بعض المفاهيم أولاً.
- التماسك:: يشير إلى قياس مدى انتماء العناصر في وحدة نمطية أو فئة ما إلى بعضها البعض.
- اقتران:: يشير إلى مستوى التبعية بين الوحدات أو الفئات.
- الحدود:: يشير إلى الحواجز بين الكود. في هذه الحالة، تشير حدود التعليمات البرمجية إلى مجالات اهتمام مختلفة داخل قاعدة التعليمات البرمجية نفسها.
- النمذجة:: عملية تقسيم نظام برمجي إلى عدة وحدات منفصلة حيث تعمل كل وحدة بشكل مستقل.
المشاكل
كما نعلم روبي لا يوفر حلًا جيدًا لفرض حدود الشيفرة. يمكننا تحديد الرؤية ولكن سيتم تحميل جميع التبعيات في مساحة الأسماء العامة. في التطبيقات الكبيرة أو المتجانسة ينتج عن عدم وجود حدود المشاكل التالية.
- تماسك منخفض,
- اقتران عالٍ,
- كود السباغيتي
في محاولة لتوحيد نظام Shopify المترابط وفرض الحدود، جربوا حلولاً مختلفة دون تحقيق النتائج المتوقعة:
- تعيين الثوابت الخاصة,
- وضع الحدود من خلال الأحجار الكريمة,
- استخدام الاختبارات لمنع الارتباطات المتقاطعة بين المكونات,
- استخدام جوهرة التعديل في روبي,
- إنشاء الخدمات المصغرة.
ومع كل المعرفة التي اكتسبوها من المحاولات السابقة، قرروا إنشاء أداتهم الخاصة: باكويرك.
باكويرك
ما هي باكويرك؟
باكويرك هي أداة تحليل ثابتة تُستخدم لفرض الحدود بين مجموعات روبي الملفات المسماة الحزم.
ما هي الحزمة؟
A الحزمة هو مجلد يحتوي على شيفرة محملة تلقائيًا. Shopify's الفريق يشجع على استخدام أفضل ممارسات التصميم أثناء إنشاء الحزم.
- يجب أن نجمع الأشياء ذات الوظائف العالية معًا التماسك,
- يجب أن تكون الحزم مقترنة ببعضها البعض بشكل فضفاض نسبياً.
أنواع فحوصات الحدود
يمكننا فرض الخصوصية وحدود التبعية، والتحقق من انتهاكات الحدود والتبعيات الدورية.
باكويرك في الممارسة العملية
لا توجد طريقة واحدة محددة لهيكلة أو إعادة هيكلة تطبيقك أثناء إنشاء الحزم. في هذه المقالة، سوف نتبع الطريقة المقترحة من قبل
ستيفان هاجمان في النمذجة التدريجية ل Ruby on Rails.
اختر المشروع
يمكنك إنشاء المشروع أو اختر أحد مشاريعك. قررت استخدام مشروع مفتوح المصدر يسمى كود الفرز. من المهم أن نذكر أننا بحاجة إلى تطبيق Rails 6 نظرًا لأن باكويرك يستخدم زيتويرك.
تهيئة Packwerk
أولاً، نحتاج إلى إضافة الأحجار الكريمة إلى ملف الأحجار الكريمة الخاص بنا مثل جوهرة 'باكويرك'
ثم قم بتشغيل الحزمة
في وحدة التحكم. ثم نحن مستعدون لتهيئة الجوهرة التي تعمل بدء باكويرك
.
بعد ذلك، نلاحظ أن باكويرك أنشأ لنا ثلاثة ملفات:
-
Packwerk.yml
-
الحزمة.yml
-
تصريفات.yml
Packwerk.yml هو ملف التكوين الخاص ب باكويرك حيث سنقوم بتعريف الملفات المضمنة والمستثناة، وسرد مسارات التحميل، وتعريف ملف الانعطافات، من بين أمور أخرى;
الحزمة.yml هو ملف التكوين الخاص بالحزمة. في هذا الملف، سنضيف التكوين لحدود الحزمة الخاصة بنا. أي مجلد يحتوي على package.yml سيتم التعرف عليه كحزمة بواسطة باكويرك. هذا كل شيء, باكويرك أنشأنا أول
حزمة ونطلق عليها اسم الجذر الحزمة.
تصريفات.yml هو المكان الذي سنضع فيه تصريفاتنا واختصاراتنا المخصصة في حالة استخدامنا لها.
يمكنك العثور على المزيد حول الملفات وتكوينها في
باكويرك.
خصائص باكويرك
لكي تنجح النمذجة نحتاج إلى ثلاث خصائص أساسية: حاوية مسماةفإن المحتوىوالصريح التبعيات على أخرى الحاويات. لذا دعونا نعرّف هذه الخصائص في باكويرك:
-
الاسم: اسم الحزمة هو مسارها النسبي من جذر
التطبيق.
-
المحتوى: عندما نضع الحزمة.yml في مجلد، فإن جميع الملفات الموجودة في المجلد هي الآن محتوى الحزمة.
-
التبعيات: يمكننا تعريف التبعيات على الحزم الأخرى بإضافة مفتاح التبعيات إلى الحزمة.yml.
الملف الآخر الذي لا يتم تضمينه افتراضيًا ولكن يوصى به هو README. من المهم توفير معلومات حول استخدام الحزمة.
نهاية الحلقة الأولى
قراءة المزيد
GraphQL روبي. ماذا عن الأداء؟
السكك الحديدية ووسائل النقل الأخرى
تطوير القضبان باستخدام TMUX و Vim و Fzf + Ripgrep