软件分层模式
1.为什么需要分层
 业务处理的代码与JSP代码混在一起,不易于阅读,不易于代码维护,采用三层软件设计架构后,软件系统在可扩展性和可复用性方面得到极大提高,

2.软件设计中的分层模式
分层模式是最常见的一种架构模式;甚至可以说分层模式是很多架构模式的基础。

3.分层
    ①分层模式是将解决方案的组件分隔不同的层中(分工合作,细化)
    ②每一层的组件应保持内聚性(部门之间常联系)
    ③每一层都应与其下面的各层保持松耦合

4.三层架构:表示层、业务逻辑层、数据访问层
    ①表示层:位于最外层 ( 最上层 ),使用户能够直接访问,用于显示数据和接收用户输入的数据,为用户提供一种交互式操作界面。在 Web 应用程      序中,表示层一般以 JSP 文件、HTML文件为主;

    ②业务逻辑层:其主要功能是提供对业务逻辑处理的封装,在业务逻辑层中,通常会定义些接口,表示层通过调用业务逻辑层的接口实现各种操作,      如数据有效性的检验. 业务辑描述等相关功能,业务逻辑层经常放在 service 包或 biz 包下,btz 是英文 buslness 的缩写,意思是 '业务逻      辑";

    ③数据访问层:该层实现对数据的保存和读取操作。数据访问,可以访问关系数椐库、文件或 XML 文档等。数据访问层通常放在 dao 包下,DAO 是      英文 Data Access Object 的缩写,意思是 "数据访问对象 ";

【面向接口编程】

5.分层的实现
   S1阶段:实体包,工具包,dao包,ui包;
   S2阶段:数据访问层(DAO)、业务逻辑层(BIZ|SERVICES)、表示层(jsp)、实体包。

1. 表示层 jsp+html; 

2. 业务逻辑层 biz/service; 

3. 数据库访问层 dao(访问数据库、文本文件、XML文件)。 

Entity实体类不属于某层,三层都可以调用,主要用于封装数据。

JSP:收集、展示数据; 

JSP/servlet:处理数据,访问service; 

Service:业务逻辑; 
Dao:基本操作,不带业务逻辑(增删改查); 

Database:数据库。

高内聚  低耦合

高内聚:功能内部的代码非常严谨

低耦合:功能与功能之间依赖性很小,一个功能出问题不会影响其它功能的运行,俗称:模块化。
 

### 三层架构模式

#### 1.JavaEE的开发模式

> 什么是开发模式?
>
> 完成一件事情或者一个功能的一种常规的“套路”.

```
现阶段:玩JSP开发
JSP模型1开发模式
1.第一代
    JSP页面:HTML+数据库交互的代码+逻辑判断的代码
2.第二代
    利用javaweb-8的javabean模式
    JSP页面:HTML+逻辑代码
    javabean:数据库交互的代码进行了DAO封装,DAO(直接去DB(数据库)中获取数据进行操作)
        Connection conn = DBHelper.getConn();

JSP模型2开发模式
    1.servlet
    2.JavaWEB经典模式:MVC架构
```

#### 2.为什么web程序需要分层实现?

```
分工明确,方便后期维护以及优化。
```

#### 3.三层架构模式

```
简单的说就是将一个程序中的代码分了三个层,每个层做着独立的事情,但是在某种情况下,三层之间又有联系。

web显示层
    职责:显示数据
    jsp(html+css+js+jQuery+bootstrap+easyui等等)
        负责显示内容
    doXXX.jsp  处理页面----将来学习servlet  
    
业务逻辑层
    职责:从数据访问层拿到数据后进行判断限制
    service    IUsersServerDao  UsersServerImpl
    biz           IUsersBiz   UsersBizImpl
    
    S阶段编写业务逻辑层:不考虑任何条件
        直接从数据访问层中拿到数据进行操作即可。
    
    负责:
        1.删除数据:先获取有没有,然后再进行删除
        2.考虑数据库事务处理机制
            事务:在一个模块中,出现多个条件时,利用事务机制来达到一个要么一起成功,要么一起失败的现象。
            事务三个操作:commit提交  savepoint还原点 rollback 回滚(撤销)
            银行转账问题。
            刘凯丰----->转账----->谢凯进    1000万
            update tb_users set money = money-1000 where name = '刘凯丰'
            System.out.println(10/0);//运行时异常
            update tb_users set money = money+1000 where name = '谢凯进';
            
    
数据访问层
    职责:专门从DB数据库中拿数据。
    数据库帮助类DBHelper
    实体DAO:   IUsersDao  UsersDaoImpl

实体对象:不属于任何一层,但是三层之间都依赖于实体。entity