DAO 设计模式

DAO代表数据访问对象。DAO设计Pattern用于将数据持久化逻辑分离在单独的层中。这样,该服务完全不知道访问数据库的低级操作是如何完成的。这就是所谓的逻辑分离 原则。

DAO设计模式

使用DAO设计模式,我们的设计依赖于以下组件:

  • 从一层转移到另一层的模型。
  • 提供灵活设计的interfaces
  • 接口实现,持久化逻辑的具体实现。

实现DAO模式

有了上面提到的组件,让我们尝试实现DAO模式。我们在这里将使用3个组件:

1.从一层到另一层的Book‘模型。 2.提供灵活设计和接口实现的BookDao接口。 3.BookDaoImpl具体类,是BookDao`接口的实现。

让我们将这个逻辑放到图表中:DAO Pattern

DAO模式模型类

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

 1package com.journaldev.model;
 2
 3public class Books {
 4
 5    private int isbn;
 6    private String bookName;
 7
 8    public Books() {
 9    }
10
11    public Books(int isbn, String bookName) {
12        this.isbn = isbn;
13        this.bookName = bookName;
14    }
15
16    // getter setter methods
17}

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

DAO模式接口

让我们定义一个接口来在持久层访问与之关联的数据。

 1package com.journaldev.dao;
 2
 3import com.journaldev.model.Books;
 4
 5import java.util.List;
 6
 7public interface BookDao {
 8
 9    List<Books> getAllBooks();
10    Books getBookByIsbn(int isbn);
11    void saveBook(Books book);
12    void deleteBook(Books book);
13}

DAO模式实现

接下来,我们创建一个实现上述接口的具体类。

 1package com.journaldev.daoimpl;
 2
 3import com.journaldev.dao.BookDao;
 4import com.journaldev.model.Books;
 5
 6import java.util.ArrayList;
 7import java.util.List;
 8
 9public class BookDaoImpl implements BookDao {
10
11    //list is working as a database
12    private List<Books> books;
13
14    public BookDaoImpl() {
15        books = new ArrayList<>();
16        books.add(new Books(1, "Java"));
17        books.add(new Books(2, "Python"));
18        books.add(new Books(3, "Android"));
19    }
20
21    @Override
22    public List<Books> getAllBooks() {
23        return books;
24    }
25
26    @Override
27    public Books getBookByIsbn(int isbn) {
28        return books.get(isbn);
29    }
30
31    @Override
32    public void saveBook(Books book) {
33        books.add(book);
34    }
35
36    @Override
37    public void deleteBook(Books book) {
38        books.remove(book);
39    }
40}

使用DAO模式

最后,我们将此实现用于我们的main()方法:

 1package com.journaldev;
 2
 3import com.journaldev.dao.BookDao;
 4import com.journaldev.daoimpl.BookDaoImpl;
 5import com.journaldev.model.Books;
 6
 7public class AccessBook {
 8
 9    public static void main(String[] args) {
10
11        BookDao bookDao = new BookDaoImpl();
12
13        for (Books book : bookDao.getAllBooks()) {
14            System.out.println("Book ISBN : " + book.getIsbn());
15        }
16
17        //update student
18        Books book = bookDao.getAllBooks().get(1);
19        book.setBookName("Algorithms");
20        bookDao.saveBook(book);
21    }
22}

DAO模式的优势

使用DAO模式有很多优点。让我们在这里陈述其中的一些:

1.在更改持久化机制时,服务层甚至不需要知道数据来自哪里。例如,如果您正在考虑从使用MySQL转换到使用MongoDB,则所有更改只需要在DAO层中完成。 2.DAO模式强调应用程序不同组件之间的低耦合。因此,视图层不依赖于DAO层,只有服务层依赖于它,即使是具有接口的服务层也不依赖于具体的实现。 3.由于持久化逻辑是完全独立的,因此为单个组件编写单元测试要容易得多。例如,如果您使用JUnit和Mockito来测试框架,则可以很容易地模拟应用程序的各个组件。 4.在DAO模式下处理接口的同时,也强调了一种优秀的OOPS编程风格--接口而不是实现

刀模总结

在本文中,我们了解了如何使用DAO设计模式来强调保持持久性逻辑分离,从而使我们的组件松散耦合。设计模式只是基于一种编程方式,因此,语言和框架是独立的。欢迎在下面的评论中留下您的观点。从下面的链接下载DAO示例项目。

下载DAO模式示例Project

参考文献:Oracle文档维基百科

Published At
Categories with 技术
comments powered by Disqus