概念
三层架构(3-tier application) :通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。高内聚低耦合,可插拔式的,在同一层中保持内聚性,层与层保持松耦合。
关系图
三层组成:
1,表示层:(USL,User Show Layer)
前台:用于和用户交互,界面的显示有jsp,js,html,jquery等web前端技术。
后台:用于控制跳转,调用业务逻辑层(Struts2,SpringMvc)。
2,业务逻辑层:(BLL,Business Logic Layer)
接收表示层的请求,调用数据访问层的方法,逻辑性的代码。
3,数据访问层(DAL,Data Access Layer)
直接访问数据库的操作,原子性的操作,不可再拆分。
三层间的关系:
上层 请求传递给下层,下层处理后返回给上层。
基本工作流程(如下图):
如果要增加一个Student(实体类),增加的信息有sname(张三),sage(18),sex(男)这三个属性属于Student对象(实体类不属于三层但三层中是借助实体类来传递数据),就将这三个属性放对象中传递,就不每次传三个信息,直接传一个对象,在表示层面添加要信息提交到业务逻辑层,在业务逻辑层先调用数据访问层的查询方法,查询“张三”是否放在,如果不存在之后调用数据访问层的增加方法(直接增加到数据库),最后数据访问层将结果(增加成功还是失败)回复到业务逻辑层,业务逻辑层返回给表示层。
大致代码流程:
表示层:
public String addStudent() {
//搜集页面提交的数据student,调用业务逻辑层的addStudent
studentService.addStudent(student);
return "index";
}
业务逻辑层:
//业务逻辑层:写业务逻辑判断 增加Student 先判断 查询该Student是否存在 不存在才进行增加
public void addStudent(Student student) {
if(调用数据访问层的查询方法判断该Student是否存在){ //不存在该Student
增加 (调用数据访问层到增加方法)
}else { //存在
提示 该Student已存在!!!
}
}
数据访问层:
//查询
public Student findStudentBySname(Studnet student) {
直接访问数据库,查询该用户是否存在
return stu;
}
//增加
public void findStudentBySname(Studnet student) {
直接对数据库进行操作 增加
}
总结:
通过以上可看出,业务逻辑层不管数据访问层连接的是MySql还是Oracle,只要你给我调用查询,增加的方法就行了,如果我查询和增加之前用的时Oracle,现在我用MySql我只要改数据访问层的就行了,业务逻辑层的代码我们不需要动。
上层依赖其下层,依赖关系不跨层 ,单向依赖(都知道电视剧的间谍都是单向联系,一旦暴露不至于被一锅端)而三层架构思想也是这样,如果那一层有错或需要改动代码就不至于改动整个项目,去改某一层就行了。