三层架构
分层模式
分层模式是最常见的一种架构模式
分层模式是很多架构模式的基础
分层
将解决方案的组件分隔到不同的层中
在同一个层中组件之间保持内聚性
层与层之间保持松耦合
为什么需要分层模式?
1:团队开发,变于管理
三层架构使得合作开发成为可能,由于各层相互独立,一个组只需要负责块就行
2:方便查找和修改bug
上一层依赖于下一层,如果测试下一层没有问题,那么问题就只有可能出现在本层了,便于发现和修改bug,体现了“高内聚,低耦合”的思想
实现分层时需要遵循哪些原则?
上层依赖其下层,依赖关系不跨层
表示层不能直接访问数据访问层
上层调用下层的结果,取决于下层的实现
下一层不能调用上一层
下一层不依赖上一层
上层的改变不会影响下一层
下层的改变会影响上一层得到的结果
在上一层中不能出现下一层的概念
分工明确,各司其职
分层开发的优势有哪些?
1:可维护性:如果需求变动,只要相应调整某一层的实现;
2:可管理性:分层有利于分工合作
3:可扩展性:增加功能只需要修改某一层即可
分层开发的特点:
下层不知道上层的存在
仅完成自身的功能
不关心结果如何使用
每一层仅知道其下层的存在,忽略其他层的存在
只关心结果的取得
不关心结果的实现过程
JSTL通常会与EL表达式合作实现JSP页面的编码
实体类贯穿三层,在三层中都可以调用
分层代码:这里我使用的是第一种方法
package com.zking.IUserDao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.zking.uitl.DBHelp;
/**
* dao方法 增删改查
*
* @author JIE
*
* @date 2022年4月6日 下午4:10:42
*/
public class UserDao implements UserDaoimpl{
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
/**
* 用户登陆验证
* @param name 用户名
* @param pwd 用户密码
* @return 成功与否
*/
public boolean login(String name,String pwd) {
boolean f=false;
try {
con=DBHelp.getcon();
String sql="select * from tb_web where sname=? and spwd=?";
PreparedStatement ps=con.prepareStatement(sql);
ps.setString(1,name);
ps.setString(2,pwd);
ResultSet rs=ps.executeQuery();
if(rs.next()){
f=true;
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelp.myClose(con, ps, rs);
}
return f;
}
}
package com.zking.IUserDao;
public interface UserDaoimpl {
/**
* 用户登陆验证
* @param name 用户名
* @param pwd 用户密码
* @return 成功与否
*/
public boolean login(String name,String pwd);
}
package com.zking.biz;
/**
* 用户业务逻辑层
*
* @author JIE
*
* @date 2022年4月11日 下午5:59:12
*/
public interface Userbiz {
/**
* 用户登陆验证
* @param name 用户名
* @param pwd 用户密码
* @return 成功与否
*/
public boolean login(String name,String pwd);
}
package com.zking.biz;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.zking.IUserDao.UserDao;
import com.zking.IUserDao.UserDaoimpl;
import com.zking.uitl.DBHelp;
public class Userbiziml implements Userbiz{
UserDaoimpl iud=new UserDao();
/**
* 用户登陆验证
* @param name 用户名
* @param pwd 用户密码
* @return 成功与否
*/
public boolean login(String name,String pwd) {
return iud.login(name, pwd);
}
}