在 Java 开发中,DAO(Data Access Object)模式之所以要“解耦”,核心目的是为了降低系统各部分之间的依赖,提高可维护性、可扩展性和可测试性。下面从几个角度详细说明。
DAO 的本意是:
把“业务逻辑”和“数据访问逻辑”分开
解耦通常指:
如果不解耦:
UserService {
MySQLUserDAO dao = new MySQLUserDAO();
}
问题:
解耦后:
UserService {
UserDAO userDAO; // 接口
}
✅ 数据源变了,业务代码一行都不用改
数据访问逻辑非常容易变化:
如果业务代码里到处写 JDBC:
PreparedStatement ps = conn.prepareStatement("SELECT ...");
❌ 改一处 SQL,可能要改十个地方
DAO 解耦后:
不解耦时:
解耦后:
UserDAO mockDAO = mock(UserDAO.class);
✅ 可以用 Mock 测试业务逻辑
✅ 不依赖数据库,测试速度快
DAO 解耦本质上是遵循:
一个系统里可能:
DAO 接口统一:
public interface UserDAO {
User findById(Long id);
}
✅ 内部实现可以千变万化
Service 层
↓ 依赖接口
DAO 接口
↑ 实现
DAO 实现(MySQL / Oracle / MyBatis)
示例:
// 接口
public interface UserDAO {
User findById(Long id);
}
// 实现
@Repository
public class UserDAOImpl implements UserDAO {
public User findById(Long id) {
// JDBC / MyBatis
}
}
Java DAO 解耦,是为了让“业务逻辑”不再被“数据访问细节”绑架。
好处可以总结为:
如果你愿意,我也可以结合 Spring / MyBatis / JPA 给你讲“实际项目中 DAO 是怎么解耦的”。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。