quartz/content/Obsidian/编程模型及方法/DAO.md
wangzipai f7aa38b65a
[PUBLISHER] Merge #16
* PUSH NOTE : DAO.md

* PUSH NOTE : JDBC.md
2024-10-31 16:58:16 +08:00

95 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
date created: 2024-10-31 16:48
date updated: 2024-10-31 16:58
tags:
- 设计模式
share: "true"
link: "false"
---
# 什么是DAO
**DAO** Data Access Object数据访问对象是一个设计模式用于==处理程序与数据源之间的交互==。数据源可以是数据库、文件系统或其他存储系统。DAO的主要作用是将业务逻辑你的应用程序的主要功能与数据访问逻辑如何存取数据分开。
# 为什么要使用DAO
## 分离关注点
将业务逻辑与数据访问逻辑分开,使代码更加清晰和易于维护。你可以专注于实现业务功能,而不必关心如何存取数据。
## 方便更改
如果需要更换数据源例如从MySQL换成PostgreSQL只需修改DAO的实现不用更改业务逻辑。
## 提高可测试性
使用DAO模式你可以创建模拟对象来测试业务逻辑而无需连接真实的数据库。这**使得单元测试更加简单和高效**。
# DAO的组成部分
一个典型的DAO结构通常包括以下几个部分
## DAO接口
定义数据访问的方法,例如:
```java
public interface UserDAO {
void create(User user);
User read(int id);
void update(User user);
void delete(int id);
}
```
## DAO实现类
实现上述接口,并包含具体的数据访问逻辑。例如,使用[[../编程语言/Java/JDBC|JDBC]]来连接数据库:
```java
public class UserDAOImpl implements UserDAO {
@Override
public void create(User user) {
// 代码来插入用户到数据库
}
@Override
public User read(int id) {
// 代码来从数据库读取用户
return user;
}
@Override
public void update(User user) {
// 代码来更新用户信息
}
@Override
public void delete(int id) {
// 代码来删除用户
}
}
```
## 业务逻辑层
调用DAO接口来执行操作。它不需要知道具体的实现细节
```java
public class UserService {
private UserDAO userDAO;
public UserService(UserDAO userDAO) {
this.userDAO = userDAO;
}
public void registerUser(User user) {
userDAO.create(user);
}
}
```
# 总结
DAO模式的核心思想是通过一个抽象层DAO接口与具体实现DAO实现类分离数据访问逻辑使得代码更加模块化和可维护。理解这一模式能更好地构建应用程序并能在以后的项目中更灵活地处理数据。