Clean Architecture in ASP.NET Core

عندما تتعقد عمليات تطوير البرمجيات، يصبح من المهم أن تظل التطبيقات قابلة للصيانة والتطوير مع مرور الوقت. وهنا تأتي هندسة البرمجيات النظيفة (Clean Architecture) كحل يتيح لنا بناء تطبيقات مرنة.
Clean Architecture in ASP.NET Core
Clean Architecture in ASP.NET Core

في هذه الصفحة

المقدمة

عندما تتعقد عمليات تطوير البرمجيات، يصبح من المهم أن تظل التطبيقات قابلة للصيانة والتطوير مع مرور الوقت. وهنا تأتي هندسة البرمجيات النظيفة (Clean Architecture) كحل يتيح لنا بناء تطبيقات مرنة وسهلة التعديل، خصوصًا في بيئة .NET. في هذا المقال، سنتعرف على مفهوم هذه الهندسة وكيفية تطبيقها ببساطة.


ما هو الـ Clean Architecture

هندسة البرمجيات النظيفة هي مفهوم تم تطويره بواسطة روبرت مارتن، المعروف بـ "Uncle Bob"، وهي تعتمد على مبدأ أساسي وهو فصل المسؤوليات داخل التطبيق. الهدف الرئيسي هو بناء أنظمة قابلة للتعديل بسهولة، بغض النظر عن التغييرات التي قد تحدث في قاعدة البيانات، واجهة المستخدم، أو حتى الأنظمة الخارجية.


ما هي مبادئ الـ Clean Architecture

  1. فصل الطبقات (Layers): يتم تقسيم التطبيق إلى عدة طبقات، كل طبقة تؤدي وظيفة محددة ومستقلة عن باقي الطبقات. هذا يساعد في سهولة الصيانة.
  2. مبدأ عكس الاعتماد (Dependency Inversion Principle): يعني أن الطبقات الأساسية (مثل المنطق الداخلي) لا تعتمد على التفاصيل الخارجية مثل قواعد البيانات أو الواجهات.
  3. الكائنات الأساسية (Entities): هي العناصر التي تمثل القواعد الأساسية للتطبيق ولا تتأثر بأي تغييرات خارجية.
  4. الحالات أو الاستخدامات (Use Cases): تصف كيف يجب أن يعمل التطبيق في سيناريوهات معينة، وتتعامل مع الكائنات الأساسية.
  5. الواجهات (Interfaces): تستخدم لتفصل بين المنطق الأساسي وتطبيقات الأنظمة الخارجية.

تطبيق الـ Clean Architecture in .NET

يمكن تطبيق هندسة البرمجيات النظيفة في .NET عبر تقسيم التطبيق إلى عدة مشاريع، كل مشروع يمثل طبقة معينة. إليك بعض الأمثلة:

الطبقة الأساسية (Core Layer): تحتوي هذه الطبقة على الكائنات الأساسية مثل:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

Core Layer

طبقة الحالات (Use Cases Layer): تتعامل مع المنطق الخاص بالتطبيق، مثل استرجاع منتج معين:

public class GetProductUseCase
{
    private readonly IProductRepository _productRepository;

    public GetProductUseCase(IProductRepository productRepository)
    {
        _productRepository = productRepository;
    }

    public Product Execute(int id)
    {
        return _productRepository.GetProductById(id);
    }
}

Use Cases Layer


تقدروا دلوقتي تشتركوا في النشرة الأسبوعية لاقرأ-تِك بشكل مجاني تمامًا عشان يجيلكوا كل جديد بشكل أسبوعي فيما يخص مواضيع متنوعة وبشروحات بسيطة وسهلة وبجودة عالية 🚀

النشرة هيكون ليها شكل جديد ومختلف عن شكلها القديم وهنحاول انها تكون مميزة ومختلفة وخليط بين المحتوى الأساسي اللي بينزل ومفاجآت تانية كتير 🎉

Eqraatech Newsletter | Eqraatech - اقرأ-تِك | Substack
محتوى تقني متميز في مختلف مجالات هندسة البرمجيات باللغة العربية عن طريق تبسيط المفاهيم البرمجية المعقدة بشكل سلس وباستخدام صور توضيحية مذهلة. Click to read Eqraatech Newsletter, a Substack publication with hundreds of subscribers.

بفضل الله قمنا بإطلاق قناة اقرأ-تِك على التليجرام مجانًا للجميع 🚀

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

مستنينكوا تنورونا , وده رابط القناة 👇

https://t.me/eqraatechcom


طبقة البنية التحتية (Infrastructure Layer): تتعامل مع تفاصيل التنفيذ مثل قاعدة البيانات:

public class SqlProductRepository : IProductRepository
{
    public Product GetProductById(int id)
    {
        // استرجاع البيانات من قاعدة البيانات باستخدام SQL
    }
}

Infrastructure Layer

طبقة العرض (UI Layer): تتفاعل مع الحالات لتقديم البيانات للمستخدم:

public class ProductController : Controller
{
    private readonly GetProductUseCase _getProductUseCase;

    public ProductController(GetProductUseCase getProductUseCase)
    {
        _getProductUseCase = getProductUseCase;
    }

    public IActionResult GetProduct(int id)
    {
        var product = _getProductUseCase.Execute(id);
        return View(product);
    }
}

UI Layer


فوائد الـ Clean Architecture

  • سهولة الاختبار (Testability): بفضل فصل الطبقات، يصبح من السهل كتابة اختبارات الوحدة (Unit Tests).
  • المرونة (Scalability): يمكن تطوير التطبيق بسهولة وإضافة وظائف جديدة دون الحاجة إلى تعديل كبير.
  • الصيانة (Maintainability): يتيح فصل المسؤوليات سهولة اكتشاف المشكلات وإصلاحها.

في الختام

تطبيق هندسة البرمجيات النظيفة في .NET يضيف إلى التطبيق تنظيمًا واستدامة على المدى البعيد. في المقالات القادمة، سنتطرق إلى مواضيع متقدمة مثل مقارنة هندسة البرمجيات النظيفة مع الهندسة المكدسة (Layered Architecture)، وغيرها من الأساليب.

اشترك الآن بنشرة اقرأ-تِك الأسبوعية

لا تدع أي شيء يفوتك. واحصل على أحدث المقالات المميزة مباشرة إلى بريدك الإلكتروني وبشكل مجاني!