NetArchTest : Architecture as Code
لو إنت لسه بتبدأ، أكيد سمعت جملة "الكود ده ريحته وحشة" (Code Smells). الـ NetArchTest هي الأداة اللي بتركب "فلاتر" على الكود بتاعك عشان الريحة دي متظهرش أصلاً. هي Library بتسمحلك تكتب Architecture as Code.
1. ليه أصلاً نحتاج NetArchTest؟ (السيناريو المرعب)
تخيل عندك موديول الـ Orders. المفروض إنه ميعرفش حاجة عن موديول الـ Payments إلا من خلال Events.
جِه مبرمج جديد "عفوي" وقام كاتب سطر واحد بس:
في لحظة، الموديولين بقوا "ملزوقين في بعض" (Tightly Coupled). لو جيت في المستقبل تشيل موديول الدفع عشان تغيره، موديول الطلبات هيقع معاك. الـ NetArchTest مهمته يمنع السطر ده إنه يتكتب أصلاً.
2. إزاي نبدأ؟ (التركيب والتجهيز)
أول حاجة، إنت بتعمل مشروع XUnit أو NUnit عادي خالص جوه الـ Solution وتسميه Architecture.Tests. وبنزل الـ Package دي:
Install-Package NetArchTest.eNhancedEdition
ملحوظة: النسخة الـ
eNhancedEditionفيها مميزات أكتر وتصليح لمشاكل كانت في النسخة القديمة.
3. القواعد الأساسية (The Big Four)
الـ NetArchTest بيشتغل بمنطق 4 خطوات:
Types.InAssembly: بتحدد له إنت بتدور في أنهي مشروع (Project).
That(): بتحدد الفلاتر (أنا عاوز الـ Classes اللي في الفولدر الفلاني).
Should() / ShouldNot(): دي القاعدة (لازم أو مش لازم).
GetResult(): دي اللي بتطلع النتيجة.
4. أمثلة حقيقية من قلب الشغل
أ- حماية الـ Domain (قاعدة: "ممنوع اللمس")
الـ Domain هو أغلى حاجة في السيستم، لازم يفضل "نضيف" مبيعتمدش على أي Library خارجية (زي الـ Entity Framework).
ب- فرض نظام التسمية (Naming Conventions)
عشان المشروع ميبقاش "سداح مداح"، كل حاجة لازم يكون ليها اسم واضح.
ج- عزل الموديولات (قلب الـ Modular Monolith)
دي أهم حتة! إزاي تضمن إن موديول Inventory ميعرفش موديول Orders.
5. ميزات متقدمة: الـ Custom Rules
لو عندك قاعدة معقدة مش موجودة جاهزة، تقدر تعملها بنفسك. مثلاً: "كل الـ Entities لازم يكون فيها Constructor فاضي و Private عشان الـ EF".
إنت بتعمل Class بيعمل ICustomRule وبتكتب جواه الـ Logic بتاعك بالـ Reflection.
6. إزاي تخليه جزء من حياتك؟ (CI/CD)
أحلى حتة في الموضوع إن الاختبارات دي بتترفع على الـ GitHub Actions أو Azure DevOps.
لو المبرمج عمل
Pull Request.الـ Pipeline هيجري الـ Architecture Tests.
لو المبرمج عك في المعمارية، الـ Pipeline هيديله Red Cross ❌ والـ Code Review هيترفض أوتوماتيك.
7. نصائح "صنايعي" كود
متبدأش بكل القواعد مرة واحدة: لو عندك مشروع قديم (Legacy)، الـ NetArchTest هيطلعلك آلاف الأخطاء. ابدأ حط قواعد "للكود الجديد" بس، وصلح القديم واحدة واحدة.
استخدم الـ Namespaces صح: الـ NetArchTest بيعتمد بشكل أساسي على الـ Namespaces، فلو تقسيمتك للفولدرات غلط، الأداة دي مش هتعرف تساعدك.
خليه مستند رسمي: لما حد يسألك "إيه قواعد المعمارية عندنا؟"، قوله "افتح الـ Architecture Tests Project واقرأ الـ Tests".
Comments
Post a Comment