DAO 设计模式
DAO 代表数据访问对象。DAO设计模式用于将数据持久性逻辑分离到单独的层中。这样,服务就完全不知道如何完成访问数据库的低级操作。这被称为逻辑分离原则。
DAO 设计模式
使用 DAO 设计模式,我们的设计依赖于以下组件:
- 从一层转移到另一层的模型。
- 提供灵活设计的接口。
- 接口实现是持久性逻辑的具体实现。
实现 DAO 模式
利用上面提到的组件,我们来尝试实现 DAO 模式。这里我们将使用 3 个组件:
Book
从一层转移到另一层的模型。BookDao
提供灵活的设计和API来实现的接口。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;
}
// getter setter methods
}
它是一个简单的对象,仅具有 2 个属性,以使事情变得简单。
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 {
//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.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());
}
//update student
Books book = bookDao.getAllBooks().get(1);
book.setBookName("Algorithms");
bookDao.saveBook(book);
}
}
DAO 模式的优点
使用 DAO 模式有很多优点。我们来列举一下其中的一些:
- 在更改持久性机制时,服务层甚至不必知道数据来自哪里。例如,如果您考虑从使用 MySQL 转向 MongoDB,则所有更改都只需要在 DAO 层完成。
- DAO 模式强调应用程序不同组件之间的低耦合。因此,View 层不依赖 DAO 层,只有 Service 层依赖它,而且是接口依赖,而不是具体实现。
- 由于持久性逻辑完全独立,因此为各个组件编写单元测试要容易得多。例如,如果您使用 JUnit 和 Mockito 来测试框架,则可以轻松模拟应用程序的各个组件。
- 由于我们在 DAO 模式中使用接口,因此它还强调“使用接口而不是实现”的风格,这是一种优秀的 OOP 编程风格。
DAO 模式结论
在本文中,我们了解了如何使用 DAO 设计模式来强调保持持久性逻辑分离,从而使我们的组件松散耦合。设计模式只是基于一种编程方式,因此与语言和框架无关。欢迎在下面的评论中留下您的观点。从以下链接下载 DAO 示例项目。
下载 DAO 模式示例项目