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模式。我们将在这里使用三个组件:
-
- 从一层传递到另一层的书模型。
-
- 提供灵活设计和API以实现的BookDao接口。
- BookDaoImpl具体类是BookDao接口的实现。
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模式有很多优点。让我们在这里列举一些:
-
- 在更改持久化机制时,服务层甚至不需要知道数据来自哪里。例如,如果您考虑从使用MySQL切换到MongoDB,只需在DAO层进行更改即可。
-
- DAO模式强调应用程序不同组件之间的低耦合。因此,视图层不依赖DAO层,只有服务层依赖它,即使是通过接口而不是具体实现。
-
- 由于持久化逻辑是完全分离的,因此编写单元测试以测试各个组件会更加容易。例如,如果您使用JUnit和Mockito进行测试框架,很容易对应用程序的各个组件进行模拟。
- 由于在DAO模式中使用接口,它还强调了“使用接口而不是实现”的编程风格,这是一种优秀的面向对象编程风格。
DAO模式的结论
在本文中,我们学习了如何使用DAO设计模式来强调持久性逻辑的分离,使我们的组件松耦合。设计模式只是基于一种编程方式,因此与语言和框架无关。请随意在下面的评论中留下您的意见。通过下面的链接下载DAO示例项目。
下载 DAO 模式示例项目
参考资料:Oracle文档,维基百科。