一、三层模式的简介
1.三层模式的划分
2.层与层之间的关系
二、分层实现删除新闻主题
1.编写数据访问层组件(dao层)
- 数据库连接的开闭由业务层统一管理
public class TopicsDaoImpl extends BaseDao implements TopicsDao {
// Connection对象由业务层通过构造方法注入
public TopicsDaoImpl(Connection conn) {
super(conn);
}
…… // 省略部分方法
}
2.编写业务逻辑层组件(service层)
- 封装业务流程并统一管理数据库连接和事务
try {
conn = DatabaseUtil.getConnection();
conn.setAutoCommit(false); // 关闭自动提交,开启事务
// 为DAO组件设置数据库连接对象,保证整个流程使用同一个Connection对象
NewsDao newsDao = new NewsDaoImpl(conn);
TopicsDao topicsDao = new TopicsDaoImpl(conn);
// 控制业务流程的执行
……
conn.commit(); // 执行成功,提交事务
} catch (SQLException e) {
……
conn.rollback(); // 出现异常,回滚事务
……
} finally { // 业务完成后统一关闭数据库连接
DatabaseUtil.closeAll(conn, null, null);
}
3.修改控制页面(.jsp文件)
<%…… // 省略部分代码
TopicsService topicsService = new TopicsServiceImpl();
if ("del".equals(opr)) { //删除主题
String tid = request.getParameter("tid");
int result = topicsService.deleteTopic(Integer .parseInt(tid));
if (result == -1) {
out.print("<script type=\"text/javascript\">");
out.print("alert(\"该主题下还有文章,不能删除!\");");
out.print("location.href=\"topic_control.jsp?opr=list\";");
out.print("</script>");
} else if (result == 0) {
……
}
……
} …… // 省略其他操作代码
%>
三、分层原则
上层依赖其下层,依赖关系不跨层
- 表示层不能直接访问数据访问层
- 上层调用下层的结果,取决于下层的实现
下一层不能调用上一层
下一层不依赖上一层
- 上层的改变不会影响下一层
- 下层的改变会影响上一层得到的结果
在上一层中不能出现下一层的概念
- 分工明确,各司其职
四、分层开发的优势
- 职责清晰
- 无损替换
- 复用代码
- 降低了 依赖程度