Understanding Onion Architecture in ASP.NET Core

في عالم تطوير البرمجيات، تُعتبر المعمارية أمرًا حيويًا لتصميم أنظمة مرنة وقابلة للتطوير. واحدة من المعماريات الشائعة هي Onion Architecture، التي تهدف إلى فصل المسؤوليات وتحقيق مرونة أكبر في التعديل والتطوير.
Understanding Onion Architecture in ASP.NET Core
Understanding Onion Architecture in ASP.NET CORE

في هذه الصفحة

المقدمة

في عالم تطوير البرمجيات، تُعتبر المعمارية أمرًا حيويًا لتصميم أنظمة مرنة وقابلة للتطوير. واحدة من المعماريات الشائعة هي Onion Architecture، التي تهدف إلى فصل المسؤوليات وتحقيق مرونة أكبر في التعديل والتطوير.

تقوم Onion Architecture على مفهوم الطبقات، حيث يتم تنظيم الكود في عدة طبقات متداخلة، مثل شكل البصلة (Onion). كل طبقة تمثل جانبًا معينًا من التطبيق، مما يسهل فهمه وتطويره.


مكونات Onion Architecture

تتكون Onion Architecture من عدة طبقات رئيسية، كل طبقة لها مسؤوليات محددة:

Onion Layer Architecture

1- الطبقة المركزية (Core Layer)

  • تحتوي على نموذج البيانات (Models) الذي يمثل الجداول في قاعدة البيانات. على سبيل المثال، إذا كنت تعمل على تطبيق لإدارة المكتبات، فقد يكون لديك نموذج يُدعى Book يحتوي على خصائص مثل Title وAuthor وISBN.
  • تشمل الواجهات (Interfaces) التي تحدد كيفية تفاعل الطبقات الأخرى مع الطبقة الأساسية. على سبيل المثال، يمكنك تعريف واجهة IBookRepository التي تحتوي على طرق مثل AddBook وGetBooks.
public class Book
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Author { get; set; }
    public string ISBN { get; set; }
}
public interface IBookRepository
{
    void AddBook(Book book);
    IEnumerable<Book> GetAllBooks();
}

Core Layer

2- طبقة المستودع (Repository Layer)

  • تشمل DbContext الذي يمثل الاتصال بقاعدة البيانات. على سبيل المثال، يمكن أن يكون لديك LibraryContext كـ DbContext يحدد مجموعات البيانات.
  • تحتوي على الـ Repositories، والتي تُستخدم لتنفيذ عمليات CRUD (إنشاء، قراءة، تحديث، حذف) على البيانات. هنا، يمكنك تنفيذ BookRepository لتنفيذ واجهة IBookRepository.
public class LibraryContext : DbContext
{
    public DbSet<Book> Books { get; set; }
}
public class BookRepository : IBookRepository
{
    private readonly LibraryContext _context;
    public BookRepository(LibraryContext context)
    {
        _context = context;
    }
    public void AddBook(Book book)
    {
        _context.Books.Add(book);
        _context.SaveChanges();
    }
    public IEnumerable<Book> GetAllBooks()
    {
        return _context.Books.ToList();
    }
}

Repository Layer


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

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

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

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

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

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

https://t.me/eqraatechcom


3- طبقة الخدمات (Services Layer)

  • تتضمن الخدمات (Services) التي تحتوي على منطق الأعمال (Business Logic) للتطبيق. على سبيل المثال، يمكنك إنشاء BookService الذي يستخدم IBookRepository لإدارة الأعمال المتعلقة بالكتب، مثل إضافة كتاب جديد.
public class BookService
{
    private readonly IBookRepository _bookRepository;


    public BookService(IBookRepository bookRepository)
    {
        _bookRepository = bookRepository;
    }


    public void CreateBook(string title, string author, string isbn)
    {
        var book = new Book { Title = title, Author = author, ISBN = isbn };
        _bookRepository.AddBook(book);
    }

    public IEnumerable<Book> GetBooks()
    {
        return _bookRepository.GetAllBooks();
    }
}

Service Layer


4- طبقة العرض (Presentation Layer)

  • تشمل واجهة المستخدم (UI)، سواء كانت عبر تطبيق ويب (MVC) أو واجهة برمجة تطبيقات (API). هنا، يمكنك إنشاء واجهة ويب تستخدم BookService لعرض وإدارة الكتب.
public class BooksController : Controller
{
    private readonly BookService _bookService;


    public BooksController(BookService bookService)
    {
        _bookService = bookService;
    }
    public IActionResult Index()
    {
        var books = _bookService.GetBooks();
        return View(books);
    }
    [HttpPost]
    public IActionResult Create(string title, string author, string isbn)
    {
        _bookService.CreateBook(title, author, isbn);
        return RedirectToAction("Index");
    }
}

Presentation Layer


مميزات Onion Architecture

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

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

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