java中的各种架构

常见包名的含义:

  • dao 数据库操作,增删改查,jdbc中具体的数据处理
  • model 一般是javabean对象,与数据库的某个表相关联
  • service 供外部调用,等于对dao,model等进行了包装
  • bean getter,setter方法
  • util:工具类,理论上应该所有方法都是static的,如字符串处理、日期处理,数据库连接的工具类,jdbc中DBUtil获取数据库链接、关闭数据库链接(getConnection,close)

MVC架构

基本思想就是把程序界面和业务逻辑分离开来,方便开发、测试以及后期为维护,增强各模块间的独立性,避免牵一发而动全身:

  • Model(模型):用于实现一些数据业务逻辑,主要是接受处理数据以及访问操作数据库
  • View(视图):用于向用户显示一些数据
  • Controller(控制器):用于处理应用与用户的交互,主要是从View(视图)读取数据,控制用户输入,将数据发送到Model(模型)

Servlet+JSP(Javaweb)中MVC的分工:

  • Model(模型):以javabean为主体,实现数据逻辑和数据库访问操作
  • View(视图):JSP或HTML页面为主体,可配合ajax实现高可交互性的异步通讯
  • Controller(控制器):以Servlet为主体,实现如读取用户表单提交信息等功能,并将数据发送到javabean进行处理

其中,Model(模型)层又可以分为DAO(Data Access Object 数据访问对象)层与service业务层,DAO层负责将数据库访问代码封闭,而业务层负责封装业务逻辑,处理数据,实现用户需求,最为核心:

  • Model(/domain):定义一个javabean。
  • Dao:持久层,数据库操作,增删查改。
  • Service:业务逻辑层,完成相应的业务逻辑处理,需要操作数据的时候,通过service层访问DAO层来实现 。
  • Controller(servlet):完成界面请求、对界面进行跳转。servlet调用service层。

Javaweb架构的历史沿革:

①JSP Model1第一代
JSP Model1是JavaWeb早期的模型,它适合小型Web项目,开发成本低!Model1第一代时期,服务器端只有JSP页面,所有的操作都在JSP页面中,连访问数据库的API也在JSP页面中完成。也就是说,所有的东西都耦合在一起,对后期的维护和扩展极为不利。

②JSP Model1第二代
JSP Model1第二代有所改进,把业务逻辑的内容放到了JavaBean中,而JSP页面负责显示以及请求调度的工作。虽然第二代比第一代好了些,但还让JSP做了过多的工作,JSP中把视图工作和请求调度(控制器)的工作耦合在一起了。

③JSP Model2
JSP Model2模式已经可以清晰的看到MVC完整的结构了。
·JSP:视图层,用来与用户打交道。负责接收用来的数据,以及显示数据给用户;
·Servlet:控制层,负责找到合适的模型对象来处理业务逻辑,转发到合适的视图;
JavaBean:模型层,完成具体的业务工作,例如:开启、转账等。

三层架构

  • 表现层(UI):展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
  • 业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
  • 数据访问层(DAL):直接操作数据库,对数据表CRUD(增删改查)操作。

SSH框架中:

Struts位于web层,Spring位于service层,Hibernate位于dao层 。

Struts、Spring、Hibernate在各层的作用:

Struts负责Web层:ActionFormBean接收网页中表单提交的数据,然后通过Action进行处理,再Forward到对应的网页。在Struts-config.xml中定义<action-mapping>,ActionServlet会加载。

Spring负责业务层管理,即Service(或Manager)。

Service为action提供统计的调用接口,封装持久层的DAO; 可以写一些自己的业务方法; 统一的Javabean管理方法; 声明式事务管理; 集成Hibernate。

Hibernate,负责持久化层,完成对数据库的crud操作。提供OR/Mapping。它由一组.hbm.xml文件和POJO,是跟数据库中的表相对应的。然后定义DAO,这些是跟数据库打交道的类,它们会使用PO。

  • Struts在SSH框架中起控制的作用,其核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml,主要控制逻辑关系的处理。
  • Hibernate是数据持久化层,是一种新的对象、关系的映射工具,提供了从Java类到数据表的映射,也提供了数据查询和恢复等机制,大大减少数据访问的复杂度。把对数据库的直接操作,转换为对持久对象的操作。
  • Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。面向接口的编程,由容器控制程序之间的依赖关系,而非传统实现中,由程序代码直接操控。这就是所谓“控制反转”的概念所在:(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。依赖注入,即组件之间的依赖关系由容器在运行期决定,形象地说,即由容器动态地将某种依赖关系注入到组件之中,起到的主要作用是解耦。

MVC架构与三层架构

使用范围不同:三层可以应用于任何语言、任何技术的应用程序;而MVC只是为了解决BS应用程序视图层各部分的耦合关系。它们互不冲突,可以同时存在,也可根据情况使用其中一种。

MVC架构与三层架构的对应关系:

三层架构中的UI对应MVC中的view(jsp),都是用于显示以及获取界面的数据;三层架构中的BLL层和DAL层对应MVC中的Model(javabean)层都是用于处理上层传递来的数据以及从数据库获取的数据的;MVC中的Controller(Servlet)最多算是三层架构中的UI的一部分,也就我们常说的是Servlet。