نمط تصميم DAO

DAO هو اختصار لـ Data Access Object. يتم استخدام نمط التصميم DAO لفصل منطق الاستمرارية في طبقة منفصلة. بهذه الطريقة، يبقى الخدمة بالكامل في الظلام حول كيفية إجراء العمليات المنخفضة المستوى للوصول إلى قاعدة البيانات. يُعرف هذا بمبدأ فصل المنطق.

نمط تصميم DAO

مع نمط تصميم DAO، لدينا المكونات التالية التي يعتمد عليها تصميمنا:

  • النموذج الذي يتم نقله من طبقة إلى أخرى.
  • الواجهات التي توفر تصميمًا مرنًا.
  • تنفيذ الواجهة والذي هو تنفيذ ملموس لمنطق الاستمرارية.

تنفيذ نمط DAO

مع المكونات المذكورة أعلاه، دعونا نحاول تنفيذ نمط DAO. سنستخدم 3 مكونات هنا:

  1. نموذج Book الذي يتم نقله من طبقة إلى أخرى.
  2. واجهة BookDao التي توفر تصميمًا مرنًا وواجهة برمجة تطبيقات للتنفيذ.
  3. BookDaoImpl فئة ملموسة هي تنفيذ لواجهة BookDao.

دعونا نضع هذا المنطق في مخطط:

فئة نموذج نمط DAO

الآن، دعونا نضع كائن النموذج الخاص بنا.

package com.journaldev.model;

public class Books {

    private int isbn;
    private String bookName;

    public Books() {
    }

    public Books(int isbn, String bookName) {
        this.isbn = isbn;
        this.bookName = bookName;
    }

    // طرق الحصول على القيم وتعيينها
}

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

واجهة نمط DAO

لنحدد الواجهة للوصول إلى البيانات المرتبطة بها على مستوى الصمود.

package com.journaldev.dao;

import com.journaldev.model.Books;

import java.util.List;

public interface BookDao {

    List<Books> getAllBooks();
    Books getBookByIsbn(int isbn);
    void saveBook(Books book);
    void deleteBook(Books book);
}

تنفيذ نمط DAO

بعد ذلك، ننشئ فئة ملموسة تنفيذ الواجهة أعلاه.

package com.journaldev.daoimpl;

import com.journaldev.dao.BookDao;
import com.journaldev.model.Books;

import java.util.ArrayList;
import java.util.List;

public class BookDaoImpl implements BookDao {

    // القائمة تعمل كقاعدة بيانات
    private List books;

    public BookDaoImpl() {
        books = new ArrayList<>();
        books.add(new Books(1, "Java"));
        books.add(new Books(2, "Python"));
        books.add(new Books(3, "Android"));
    }

    @Override
    public List getAllBooks() {
        return books;
    }

    @Override
    public Books getBookByIsbn(int isbn) {
        return books.get(isbn);
    }

    @Override
    public void saveBook(Books book) {
        books.add(book);
    }

    @Override
    public void deleteBook(Books book) {
        books.remove(book);
    }
}

استخدام نمط DAO

وأخيرًا ، قمنا باستخدام هذا التنفيذ في طريقة main() الرئيسية لدينا:

package com.journaldev;

import com.journaldev.dao.BookDao;
import com.journaldev.daoimpl.BookDaoImpl;
import com.journaldev.model.Books;

public class AccessBook {

    public static void main(String[] args) {

        BookDao bookDao = new BookDaoImpl();

        for (Books book : bookDao.getAllBooks()) {
            System.out.println("Book ISBN : " + book.getIsbn());
        }

        //تحديث الطالب
        Books book = bookDao.getAllBooks().get(1);
        book.setBookName("Algorithms");
        bookDao.saveBook(book);
    }
}

مزايا نمط DAO

هناك العديد من المزايا لاستخدام نمط DAO. دعونا نذكر بعضها هنا:

  1. عند تغيير آلية الاستمرار ، لا يحتاج طبقة الخدمة حتى إلى معرفة مصدر البيانات. على سبيل المثال ، إذا كنت تفكر في التحول من استخدام MySQL إلى MongoDB ، يكون كل التغييرات اللازمة في طبقة DAO فقط.
  2. يؤكد نمط DAO على انخراط منخفض بين مكونات التطبيق المختلفة. لذا ، طبقة العرض ليس لديها تبعية على طبقة DAO وتعتمد فقط طبقة الخدمة عليها ، حتى مع الواجهات وليس من التنفيذ المحدد.
  3. نظرًا لأن منطق الاستمرار منفصل تمامًا ، فإنه من السهل جدًا كتابة اختبارات وحدية لمكونات الفردية. على سبيل المثال ، إذا كنت تستخدم JUnit و Mockito كأطُر اختبار ، سيكون من السهل محاكاة مكونات تطبيقك الفردية.
  4. نظرًا لأننا نعمل مع واجهات في نمط DAO ، يؤكد أيضًا على أسلوب “العمل مع الواجهات بدلاً من التنفيذ” الذي هو أسلوب برمجة ممتاز في البرمجة الشيئية.

استنتاج نمط DAO

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

تحميل مشروع مثال نمط DAO

المراجع: توثيق أوراكل، ويكيبيديا.

Source:
https://www.digitalocean.com/community/tutorials/dao-design-pattern