Table of Contents

فهم الهندسة المعمارية في تطوير البرامجيات الحديثة

ولا يزال الهيكل المرتكز على أساس أكثر الأنماط نجاحاً وواقعياً في تصميم التطبيقات القابلة للاستمرار والاختبار، إذ إن وضع مدونة في طبقات أفقية متميزة - كل منها مع تحديد واضح للمسؤولية - يضع نظاماً تفصل فيه الشواغل وتدار المعالين وتصبح الاختبارات أكثر بساطة بكثير، وهذا النمط له قيمة خاصة في برامج إدارة المحتوى مثل " Directus " ، حيث يؤدي الفصل الواضح بين الوصول إلى البيانات، ومنطق الأعمال، والعرض الأعمال، إلى زيادة قدرة الأفرقة على توسيع نطاقها الوظيفي.

ما هو المُنظمة المُعدية؟

ويقسم الهيكل المأجور تطبيقا إلى مجموعات من الوحدات التي يعالج كل منها شاغلا محددا، وأكثر الطبقات شيوعا هي:

  • Presentation Layer:] Handles user interface and input/output. In web applications this includes controllers, views, and API endpoints.
  • Business Logic Layer (or Service Layer):] Contains the core business rules and workflows. It orchestrates operations and applies domain logical.
  • Data Access Layer (or Persistence Layer):] Manages communication with databases, external storage, or third-party APIs. Isolates data retrieval and storage logical.
  • Integration/Infrastructure Layer (optional):] Handles cross-cutting concerns such as logging, caching, authentication, and external service integration.

ولا تتفاعل كل طبقة إلا مع الطبقة التي تحتها مباشرة (أو فوقها، تبعاً لاتجاه التبعية)، ويفرض هذا النمط الدقيق للاتصال على ] تفصيل الشواغل التي تجعل النظام أسهل في المنطق والتعديل، مثلاً، تنادي طبقة (العرض) بالأشياء (منطق الأعمال التجارية)، التي تستخدم بدورها فئات المستودعات (وصول إلى البيانات)().

التغيرات المشتركة في الهيكل الملكي المأجور

وفي حين أن نموذج ثلاثة طوابق هو الأكثر شيوعا، فإن العديد من الأفرقة تعتمد هيكلاً قوامه أربعة طلائع أو خمسة طوابق، وتشمل بعض التغييرات ما يلي:

  • Clean Architecture / Onion Architecture:] emphasizes dependency inversion by placing business entities at the core and having outer layers depend on inner layers.
  • Hexagonal Architecture (Ports and Adapters):] Uses ports (interfaces) and adapters (implementations) to decouple the application core from external concerns.
  • Domain-Driven Design Layers:] Separates domain, application, infrastructure, and presentation layers to align with business domain terminology.

وبغض النظر عن البديل، يظل المبدأ الأساسي كما يلي: ]] دَفع النظام إلى طبقات ذات حدود ومسؤوليات واضحة .

How Layered Architecture Improve the Testability

وتشير القابلية للاختبار إلى مدى سهولة اختبار قطعة من البرمجيات في عزلة وإلى مدى سرعة تحديد العيوب، ويعزز الهيكل المأخوذ أساسا عدة خصائص تحسن القدرة على الاختبار.

عزل الشواغل

وعندما تقع على كل طبقة مسؤولية واحدة، يمكن أن تكتب اختبارات تركز حصرا على تلك المسؤولية دون القلق بشأن الآثار الجانبية من أجزاء أخرى من النظام، فعلى سبيل المثال، يمكن للاختبارات الخاصة بطبقة منطق الأعمال أن تسخر طبقة الوصول إلى البيانات بالكامل، وهذا يعني أنه يمكنك التحقق من صحة قواعد أعمالكم في إطار الربط بين المنطق واللا يوجد فيه قاعدة بيانات، ويمكن إجراء اختبار قاعدة الأذن )مثل " الافتراض الذي يمكن أن يستكمل بنوده الخاصة به " (.

إحلال العناصر

ونظراً لأن الطبقات تتواصل عبر وصلات وصلات مُحددة جيداً (مثلاً، وصلة بينية )، يمكن أن تتبادل التنفيذات الحقيقية مع اختبارات مزدوجة - دقائق أو مزيفين أو اختبارات مُستقيمة، مما يجعل اختبار الوحدة أمراً مستقيماً، فبدون هيكل مُطبق، يتطلب الاختبار في كثير من الأحيان زيادة التطبيق أو الربط بقاعدة بيانات اختبارية بطيئة ومُبطيئة.

انخفاض التعقيد في الاختبارات

ويصبح الاختبارات أبسط من حيث الكتابة والاستمرار، ويغطي كل اختبار قطعة صغيرة محددة من الوظائف، وعندما يفشل الاختبار، يمكن للمطور أن يحدد بسرعة أي طبقة أدخلت البق، مما يقلل من الزمن ويجعل الاختبارات شبكة أمان موثوقة، وفي قاعدة مشفرة مطبقة، يمكنك أيضاً إعادة استخدام البنية التحتية للاختبارات عبر الطبقات، مثل مجموعة مشتركة من البيانات تستخدمها اختبارات الخدمة وفحوصات التحكم.

دعم مختلف أنواع الاختبارات

Layered structure naturally supports the ]testing pyramid]:

  • Unit Tests (fast, many):] Test individual classes or methods within a layer, using mocks for dependencies.
  • Integration Tests (medium, fewer):] Test interactions between two layers (e.g., service + database repository with a real test database).
  • End Tests (slow, few):] Test the full stack through the UI or public API.

وبدون طبقات واضحة، كثيرا ما تصبح اختبارات التكامل غير قابلة للتفكك من اختبارات الوحدة، وتعتمد اختبارات E2E اعتمادا كبيرا جدا، مما يؤدي إلى بطء دورات التغذية المرتدة.

تعزيز التغطية بالاختبارات الآلية مع الهيكلة المأهولة

وجود هيكل مصمم على طبقات محددة جيدا يجعل من السهل تحقيق تغطية اختبارية آلية عالية لأنك يمكن اختبار كل طبقة بدقة مع التقنية المناسبة.

الوحدة: اختبار كل لاير في عزل

وبالنسبة لطبقة منطق الأعمال، يرجى كتابة اختبارات تحقق من كل قاعدة وشرط وطريق الخطأ، وضبط طبقة الوصول إلى البيانات من أجل إعادة بيانات محددة أو وضع استثناءات، واجراء اختبارات لتسعير الاشتراكات تتجاوز مستويات مختلفة من العملاء وتأكيد حساب السعر الصحيح، دون أن يتصل ذلك على الإطلاق بقاعدة البيانات، مما يؤدي إلى تغطية جميع قواعد الأعمال في الثانية.

وبالنسبة لطبقة الوصول إلى البيانات، يمكنك كتابة اختبارات التكامل التي تستخدم قاعدة بيانات داخلية أو حاوية اختبار للتحقق من أن الاستفسارات عن تلك المعايير أو الإجراءات المخزنة أو خرائط إدارة المخاطر المؤسسية تعمل بشكل صحيح، وهذه الاختبارات تكفل إعادة طبقة البيانات إلى النتائج المتوقعة عند تقديم مدخلات صحيحة.

بالنسبة لطبقة العرض، يمكنك اختبار أجهزة التحكم/النتائج ذات الوزن الخفيف من خادم جهاز التبليغ ومسح طبقة منطق العمل هذا يتحقق من أن تحديد المسارات والتحقق من شكل الاستجابة صحيحة دون الحاجة إلى حذاء كامل

اختبار التكامل بين لايرز

وتؤكد اختبارات الاندماج أن العقود المبرمة بين الطبقات تصمد، فعلى سبيل المثال، يمكن أن يُطلق على اختبار التكامل طريقة الخدمة بطلب من شركة " HTTP " ، والتحقق من أن طبقة الوصول إلى البيانات تُحتج بارامترات صحيحة، أو اختبار أن طبقة العرض تعالج على نحو صحيح الاستثناءات التي تُلقى من طبقة منطق الأعمال (مثل تحويل ] إلى رد 404).

اختبار تدفقات العمل الأساسية من نهاية إلى نهاية

فالاختبارات من نهاية إلى نهاية (مثلاً باستخدام السيبر أو بلاي رايت) تمارس التطبيق بأكمله، بما في ذلك تطبيق نظام المعلومات المسبقة عن علم أو نظام المعلومات الإدارية العام. ونظراً لأن الطبقات الأساسية قد تكون بالفعل مثبتة جيداً، فإن اختبارات E2E يمكن أن تركز على رحلات المستعملين الحرجة (مثلاً " المستعمل ينشئ مادة في التوجيه " أو " يستكمل الرخصة " ).

مقاييس الاختبار الآلية

مع هيكل مطبق يمكنك تتبع التغطية لكل طبقة هدف مشترك هو:

  • Business logical layer:] 90-100% sub coverage.
  • Data access layer:] 80-90% coverage (including edge cases for SQL queries).
  • طبقة الاستياء: ] 70-80 في المائة (محور التركيز على المصادقة والطرق).

هذا الرصد الجاذب يساعد الفرق على تحديد النقاط الضعيفة بسرعة إذا انخفضت التغطية المنطقية للعمل، فمن الواضح أن تضيف اختبارات الوحدة، وبدون طبقات، فإن القياسات التغطيية غير مجدية - نسبة مئوية عامة عالية قد تخفي قواعد أعمال حرجة غير مثبتة داخل أجهزة التحكم بالدهن.

أفضل الممارسات في مجال تطبيق الهيكل المحكم المزود بأقسام مصممة لتعظيم القدرة على الاختبار

اعتماد بنية مطبقة ليس كافياً، يجب أن تُنفّذ الانضباط في كيفية تنظيم الطبقات واختبارها.

1 - تحديد أوجه واضحة بين لايرز

وينبغي أن تُعرِّض كل طبقة من الطبقات البينية فقط (أو الفصول المستعصية) إلى الطبقات أعلاه، فعلى سبيل المثال، تتوقف طبقة منطق الأعمال التجارية على واجهة ، وليس صفاً ]، مما يسمح بالسخرة في اختبارات الوحدات، وفي المباشرة، تستخدم هذه الخدمة على نطاق واسع تعتمد على واجهات المستودعات، مما يجعل من السهل اختبار الأذونات وسير العمل بدون قاعدة بيانات.

2- حقن الإعالة التطبيقية

(ج) استخدام حاوية دي كي تُرسل إلى أجهزة التنفيذ الفعلي في وقت التشغيل، وأثناء الاختبار، تُبادلها بالطوابق.

3- إبقاء أصحاب المطالبات مستقلين عن الأطر

(ج) كتابة منطق الأعمال باستخدام الأشياء الواضحة والمهام النقية حيثما أمكن تجنب الانقلاب على إطار محدد على الشبكة أو إدارة المخاطر المؤسسية في طبقة الأعمال، مما يضمن أن تتمكن من إعادة استخدام المنطق في سياقات مختلفة واختباره دون أن يكون له رأس عام محدد إطارياً.

4- استخدام مضاعفات الاختبارات استراتيجياً

  • Mocks] for verifying interactions (e.g., that a repository method was called with the correct arguments).
  • Stubs] for providing pre-defined responses from dependencies.
  • Fakes] (مثل قاعدة بيانات داخلية) لاختبارات التكامل التي تحتاج إلى سلوك واقعي دون بنية تحتية.

تجنب الارتطام المفرط: إذا كان اختبار لطبقة الأعمال يتطلب تحطيم عشرة واجهات، فمن علامة أن طبقة لديها مسؤوليات كثيرة جدا، والنظر في تقسيمها.

5- اختبارات السيارات على كل مستوى في مركز التحقيقات/الاتفاقية

إنشاء مواصفات اختبار منفصلة للوحدة والتكامل والاختبارات النهائية، وإجراء اختبارات للوحدة على كل التزام (سريع) وإجراء اختبارات للتكامل على طلبات السحب، وإجراء اختبارات للحرف E2E قبل الاندماج في المجرى الرئيسي أو النشر في التعبئة، وهذه الاستراتيجية الاختبارية المطبقة تضمن سرعة التغذية المرتدة مع الحفاظ على الثقة العالية.

6- طقوس الاختبارات المتعلقة بالشواغل عبر الحدود

وكثيرا ما تمس الشواغل الشاملة مثل قطع الأشجار، والاختناق، والتوثيق طبقات متعددة، ويختبرها في عزلة باستخدام اختبارات مكرسة للهياكل الأساسية (مثل اختبار أن الإطارات المتوسطة للخراطة لا تعمل داخل كل طبقة)، مما يجعل اختبارات الطبقات مركزة.

7 - الحفاظ على مدونة الاختبارات

استخدام أجهزة الاختبار، والتجهيزات، والبناء للحد من الازدواجية، تجنب نسخ مواد البيانات الكبيرة عبر ملفات الاختبار، لأن الطبقات منفصلة، يمكنك تبادل السلاسل وبيانات الاختبار لكل واجهة من الطبقات، مما يجعل من السهل تطويرها إلى جانب رمز الإنتاج.

الشلالات المشتركة وكيفية تجنبها

Pitfall 1: Leaky Abstractions

If the data access layer exposes raw SQL or ORM-specific types (e.g., in Entity Framework), the business layer becomes coupled to the persistent technology. Solution:] Define domain-specific repository interfaces that return domain objects. For example, returns [6.]

الرصيف 2:

فإضافة العديد من الطبقات (مثلاً، " طبقة نقل " أو " طبقة تدفق العمل " ) يمكن أن يزيد التعقيد دون فائدة كبيرة. Solution:] بدء بثلاث طبقات وإضافة المزيد فقط عندما يلزم فصل واضح للشواغل، وتستحدث كل طبقة إضافية واجهات جديدة وقابلية للاختبار فوق الرأس.

Pitfall 3: Skipping Integration Tests

وتعتمد الأفرقة فقط على اختبارات الوحدات التي تحتوي على طوابق وأجهزة تنصت في التفاعل الفعلي بين الطبقات (مثل الاختلافات في التسلسل، ومناولة رئيس شركة HTTP). Solution:] Include integration tests that exercise the real contracts, ideally using light weight test containers for databases or external services.

Pitfall 4: Monolithic Layers

وتصبح طبقة واحدة (في كثير من الأحيان طبقة منطق الأعمال التجارية) طبقة إله تحمل مسؤوليات كثيرة جدا. Solution:] Split large services into smaller, single-purpose classes classes. Each class should have one reason to change, following the single Responsibility Principle.

Real-World Impact: A Case Study with Directus

(ج) الإدارة هي منصة لإدارة المحتوى غير متاحة المصدر ومبنية بمبادئ هيكلية مطبقة، وتُستخدم طبقة البرمجيات المتطورة (ريست وغرافت) لمندوبي الأجهزة العاملة، التي تتضمن قواعد عمل للإذن، والتحقق من صحة البيانات، وقطع النشاط، وتستخدم طبقة الوصول إلى البيانات عملية بناء للاستفسار تدعم بائعين متعددي قواعد البيانات.

ويتيح هذا الهيكل لفريق التوجيه اختبار منطق الأذن بدقة دون قاعدة بيانات: فهي تسخر طبقة المستودعات وتزعم أن الخدمة إما تسمح أو تنقص العمليات القائمة على تشكيلات الأدوار، وبالمثل، تحقق اختبارات التكامل من أن رموز الأخطاء التي ترد في نهاية الخدمة عندما تقوم الخدمة بإعطاء استثناءات، ولأن الطبقات منفصلة بشكل نظيف، فإن جناح الاختبار سريع (اختبارات الوحدوية التي تجرى في ثوان) وموثوق به، وقد ساعد هذا النهج المطبق على الحفاظ على معدلات البقايا المنخفضة.

خاتمة

إن البنية المثبتة ليست نمطا جديدا، ولكن قيمتها بالنسبة للقابلية للاختبارات والتغطية الآلية للاختبار لا تزال غير متطابقة، فبفرض فصل بين الشواغل، والتفاعلات الواضحة، وإبطال التبعية، يخلق قاعدة بيانات يمكن اختبار كل عنصر منها في عزلة، مما يؤدي إلى ارتفاع نوعية دورات التغذية المرتدة، وزيادة الثقة في التغيرات، وسواء ما إذا كنت تبني منصة محتوى مثل " مباشرة " أو تطبيق " مؤسسة " معتاد " ، وتدفعة " ، وتدفعة " ، وتستثمر في هيكل برامجيات مقسمة جيدا " .

بدءًا من خلال تحديد طبقاتكم وواجهتهم، واعتماد حقن التبعية، ووضع استراتيجية اختبار مطبقة، وستكون النتيجة نظاماً ليس أسهل للاختبار فحسب، بل أسهل أيضاً للحفاظ على المفاعل ومداه وثباته بمرور الوقت.

موارد إضافية للقراءة: ]