DAO设计模式

DAO即数据访问对象(Data Access Object)的缩写。DAO设计模式用于在单独的层中分离数据持久性逻辑。通过这种方式,服务完全不知道如何执行低级别的数据库访问操作。这就是所谓的逻辑分离原则。

DAO 设计模式

Note: This is already in Chinese as requested.

使用DAO设计模式,我们依赖以下组件来完成设计:

  • The model which is transferred from one layer to the other.
  • The interfaces which provides a flexible design.
  • The interface implementation which is a concrete implementation of the persistence logic.

实施DAO模式

使用上述组件,让我们尝试实现DAO模式。我们将在这里使用三个组件:

    1. 从一层传递到另一层的书模型。

 

    1. 提供灵活设计和API以实现的BookDao接口。

 

    BookDaoImpl具体类是BookDao接口的实现。
DAO Pattern

DAO模式的类

现在,让我们把我们的模型对象放上去。

package com.Olivia.model;

public class Books {

    private int isbn;
    private String bookName;

    public Books() {
    }

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

    // getter setter methods
}

这是一个简单的对象,只有两个属性,以保持简单。

DAO模式接口

我们来定义访问与持久化级别相关的数据的接口。

package com.Olivia.dao;

import com.Olivia.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.Olivia.daoimpl;

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

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

public class BookDaoImpl implements BookDao {

    //list is working as a database
    private List<Books> 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<Books> 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.Olivia;

import com.Olivia.dao.BookDao;
import com.Olivia.daoimpl.BookDaoImpl;
import com.Olivia.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());
        }

        //update student
        Books book = bookDao.getAllBooks().get(1);
        book.setBookName("Algorithms");
        bookDao.saveBook(book);
    }
}

DAO模式的优点

使用DAO模式有很多优点。让我们在这里列举一些:

    1. 在更改持久化机制时,服务层甚至不需要知道数据来自哪里。例如,如果您考虑从使用MySQL切换到MongoDB,只需在DAO层进行更改即可。

 

    1. DAO模式强调应用程序不同组件之间的低耦合。因此,视图层不依赖DAO层,只有服务层依赖它,即使是通过接口而不是具体实现。

 

    1. 由于持久化逻辑是完全分离的,因此编写单元测试以测试各个组件会更加容易。例如,如果您使用JUnit和Mockito进行测试框架,很容易对应用程序的各个组件进行模拟。

 

    由于在DAO模式中使用接口,它还强调了“使用接口而不是实现”的编程风格,这是一种优秀的面向对象编程风格。

DAO模式的结论

在本文中,我们学习了如何使用DAO设计模式来强调持久性逻辑的分离,使我们的组件松耦合。设计模式只是基于一种编程方式,因此与语言和框架无关。请随意在下面的评论中留下您的意见。通过下面的链接下载DAO示例项目。

下载 DAO 模式示例项目

参考资料:Oracle文档,维基百科。

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds