قواعد المعمارية
تحدد هذه القواعد ما الذي يعد سطحًا عامًا مستقرًا، وما الذي يعد داخليًا، ومتى ينبغي توسيع مساحة العمل بحزمة أو مجلد جديد.
السطح العام
preludeهو قصة الاستيراد المستقرة الموصى بها- الوحدات المسماة مثل
layoutوrenderوinteractionوwidgetعامة لكنها موجهة للتكاملات المتقدمة - الأنواع العامة التي يكتبها المستخدم يجب أن تبقى موثقة عند موضع تعريفها
- طبقات التوافق تبقى على مسارات صريحة ولا تدخل في الـ preludes الموصى بها
السطح الداخلي
internalوinternal_preludeأدوات تنفيذ داخلية لمساحة العمل وليستا عقدًا عامًا مع التطبيقات- الوحدات المخفية مثل
layout::coreوlayout::algorithmsوlayout::componentsوlayout::pipelineيمكن أن تتغير لدعم إعادة هيكلة المحرك - علامات runtime والكاشات وتتبع الأبناء المولدين يجب أن تبقى خاصة بالحزمة أو
pub(super)ما لم تحتجها حزمة أخرى فعلًا - سياسة الحدود الفورية داخل مساحة العمل موثقة في الملف الجذري
ENGINE_BOUNDARY_RULES.md - يمنع
./scripts/check_engine_boundary_guardrails.shظهور imports جديدة من engine internals خارج المحرك أثناء تنظيف الاستثناءات الحالية
متى تضيف حزمة جديدة
أضف حزمة جديدة فقط إذا تحقق واحد على الأقل مما يلي:
- الشيفرة تقدم حدًا reusable يمكن للتطبيقات اختياره بشكل مستقل
- الميزة تحتاج سطح استيراد عامًا منفصلًا أو lifecycle مستقلة للإضافة
- رسم الاعتماديات يصبح أنظف بعزل subsystem واضح
لا تضف حزمة فقط لتقسيم الملفات. ابدأ بالمجلدات والوحدات أولًا.
متى تضيف مجلدًا أو وحدة
- أضف مجلدًا عندما تصبح مسؤولية واحدة مكوّنة من عدة ملفات متعاونة بأدوار واضحة
- أضف وحدة عندما تجعل الملكية أو الاكتشاف أوضح من ملف طويل واحد
- فضّل أسماء المسؤوليات مثل
rootsأوstateأوruntimeأوeventsأوplacement - تجنب الأسماء العامة عندما يتوفر اسم domain أدق
قواعد الاعتماديات
- الوحدات الجاهزة تعتمد على المحرك والتفاعل والستايل، لكن المحرك لا يعتمد على الوحدات الجاهزة
- التفاعل يعتمد على حالة المحرك للجذور والهندسة، لكن المحرك لا يعتمد على التفاعل
- حزم الواجهة الجامعة تعيد تصدير سطوح عامة منتقاة، ويجب ألا تسرّب المساعدات الداخلية بالخطأ