关于Java架构,框架,各种相关类的整体整理

1,Java应用有哪几种架构?

java应用有B/S和C/S两种架构

1.1 B/S和C/S的区别

  • B/S结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。

  • C/S结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。

  • 说白了,BS架构就是浏览器应用,CS架构就是客户端应用,当然应用需要服务器配合,像腾讯就是以C/S结构起家的,其旗下的QQ这一软件就是典型的C/S结构应用,像Facebook就是以B/S为结构的。B/S结构的好处就是方便,不跨平台性好,真正的实现了一次开发,处处运行。C/S结构以其稳定安全著称,降低了通讯代价,但是实现起来麻烦,需要开发服务器和客户端两套系统并且在不同的平台移植起来非常麻烦。所以现在大多是以C/S模式来开发。

1.1.1 C/S系统架构

C/S架构

1.1.2 B/S系统架构

B/S架构

1.2 B/S架构详细说明

BS架构详细

2,三层架构和MVC

2.1 三层架构

三层架构是指:视图层view,服务层service,持久层Dao,通常也叫(表示层UI,业务逻辑层BLL,数据访问层DAL)它们的功能是:

  1. .view层: 用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面

  2. service层:实现业务的主要逻辑,是系统架构中体现核心价值的部分。

  3. Dao层:有时候也称为是持久层,其功能主要是负责数据库的访问。可以访问数据库、二进制文件、文本文件等。简单的说法就是实现对数据表的Select,Insert,Update,Delete的操作。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。
    三层架构

三层架构的出现是为了降低耦合度,在这里,使用面向抽象编程,也就是上层对下层的调用,直接通过接口来完成,下层对上层的真正服务提供者,是下层实现的接口实现类,实现类是可以更换的,这就实现了层间的解耦合。

-------------------------------------------------------------------------------------

实际项目中的包命名结构 ,其实就是三层架构的体现:

xxx:代表公司名称 yyy:代表项目名称

com.xxx.yyy.dao      dao层接口
com.xxx.yyy.dao.impl    dao层实现
com.xxx.yyy.service     service层接口
com.xxx.yyy.service.impl  service层实现      
com.xxx.yyy.web      web层
com.xxx.yyy.util      工具包
com.xxx.yyy.domain    javabean

2.2 MVC

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:

  1. View: 视图,为用户提供使用界面,与用户进行交互。

  2. Model: 模型承载数据,对用户提交请求进行计算的模块,分为两类:1.数据承载bean,2.业务承载bean,数据承载bean是指实体类专门承载业务数据的,比如Student,User,业务处理bean是指Service或者Dao对象,专门处理用户的请求的

  3. Controller:控制器,用来将用户请求转发给相应的Model进行处理,并且根据Model的计算结果向用户提供相应的响应。

MVC工作流程:
MVC
最典型的MVC就是JSP + Servlet + javabean的模式

2.3 三层架构和MVC的区别

MVC:是一种设计模式,我们可以用它来创建在域对象和UI表示层对象之间的区分。它是根据项目的具体需求来决定是否适用于该项目。

三层架构:是一个分层式的软件体系架构设计,它可适用于任何一个项目。

三层架构和MVC设计模式侧重点不一样,三层是一种笼统的架构思想,没有限制具体的设计;而MVC就比较具体的说明它的设计方法。我们从接手一个项目开始,首先,我们需要进行架构设计,一般我们采用的就是分层式的架构设计,即我们的三层架构。然后,在确定了架构以后,我们再根据项目的具体需求去考虑是否需要应用一些设计模式,比如是否应用我们的MVC模式,抽象工厂模式等等。

三层侧重的是整体的一个解耦,而MVC侧重的是web系统的解耦,即侧重jsp和Servlet的一个解耦。

-------------------------------------------------------------------------------------

三层架构与MVC毫无关系。之所以这样说,是因为它们二者使用范围不同:三层可以应用于任何语言、任何技术的应用程序;而MVC只是为了解决B-S应用程序视图层各部分的耦合关系。它们互不冲突,可以同时存在,也可根据情况使用其中一种。

之所以我们会混淆,是因为在进行web开发时两者会同时使用。

在三层架构设计中,表示层可由MVC设计模式中的视图和控制器来实现,而业务逻辑层和数据访问层则组成MVC设计模式中的模型的实现。因此,在实际的应用中,都是采用三层架构来搭建系统的框架,而表示层与业务逻辑层和数据访问层的交互则是通过MVC设计模式来实现。
MVC和三层架构关系
MVC将三层架构中的UI分成了控制层和视图层。将三层架构中的数据访问层和业务逻辑层整合成了模型层。

3,SSM,SSH——软件架构设计模式的具体实现

概述:SSM,SSH都是javaWeb框架,是MVC架构模式的具体实现

3.1 SSM

3.1.1 SSM简述

SSM,即SpringMVC,Spring与Mybatis的统称。

  1. SpringMVC:作为view的实现者,它的controller作为整个应用的控制器,完成用户请求的转发和对用户的响应。

  2. Mybatis:作为Dao的实现者,完成数据库的增伤改查等功能。

  3. Spring:是整个应用的大管家,整个应用中所有的bean的生命周期行为,都是由Spring来管理的,就是说整个应用中所有的对象的创建,初始化,销毁,以及对象之间关联的关系维护,都是由Spring来进行管理。

3.1.2 SSM和MVC对应关系

SSM

3.1.3 SSM框架有哪几个层,以及详细的完成过程

具体看后续SSM专栏

3.2 SSH

3.2.1 SSH简述

SSH多个框架(struts2+spring+hibernate)的集成,是目前较流行的一种企业及Web应用程序开源集成框架。

  1. Struts2:
    Struts对Model,View和Controller都提供了对应的组件。但是在ssh开发过程中主要用Struts作为三层架构中的表现层,也就是MVC中的View和Control层。

    Struts2提供了表单提交参数封装成POJO类,提交参数的类型转换,输入校验,文件的上传下载,程序的国际化,Struts2标签,以及对AJAX的支持。

  2. Hibernate:
    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,说的简单点:就是功能更加强大的JDBC。

    Hibernate实现了对象到数据库端的封装。就是常说的ORM(Object Relation
    Mapping),它的出现使得编程更加的面向对象,在传统的编程上,我们要将对象存储到关系数据库中,需要写很多代码来实现,而且需要考虑跨数据库的平台的问题。有了Hibernate可以方便的实现从对象转换到关系数据库。这就是对象持久化。

  3. Spring:
    主要包含两个重要功能:IOC和AOP,也就是常说的依赖注入和面向切面编程。当然还有Spring的事务功能,不过这一功能是在结合前面两者的功能实现的。

    IOC:依赖注入(控制反转),是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;第二层是依赖注入:将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系。他们的依赖关系只在使用的时候才建立。简单来说就是不需要NEW一个对象了。

    AOP这是一种面向切面的编程思想,这种思想使得编程思想上得到了历史性的进步。它将程序的执行过程切割成不同的面,在面之间可以插入我们想执行的逻辑。

3.2.2 SSH和MVC对应关系

一进行javaWeb开发很多时候我们按照这样的层次进行划分:

1、在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件(struts-config.xml)将ActionServlet接收到的Request委派给相应的Action处理,然后action进行对请求处理并转发给JSP页面。

2、在业务逻辑层中,管理服务组件的Spring IoC容器负责向Struts2提供具体的Action对象,提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。

3、在数据访问层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果,给业务逻辑层。

按照MVC模式时:Jsp对应着表现层,struts2对应控制层,Spring和Hibernate对应模型层。

分层不是绝对的,每个人的见解是不一样的,仅供参考;

3.2.3 SSH框架有哪几个层,以及详细的完成流程

具体看后续SSH专栏

4,Java中的各种类

4.1 Entity

数据库实体类(Entity)在三层中并不是作为一层而存在的,而是作为一个类库,起到封装数据库表的作用
实体类
entity的意思就是实体的意思,所以也是最常用到的,entity包中的类是必须和数据库相对应的,比如说:数据库有个user表,字段有long类型的id,string类型的姓名,那么entity中的user类也必须是含有这两个字段的,且类型必须一致。不能数据库存的是long类型,user类里的属性是string类型。这样做的好处是保持实体类和数据库保持一致,另外,当用到hibernate或是mybatie框架来操作数据库的时候,操作这个实体类就行,写sql文之前不需要再做数据格式处理。

4.2 Model

model是模型的意思,当用model当包名的时候,一般里面存的是实体类的模型,一般是用来给前端用的。比如:前端页面需要显示一个user信息,user包含姓名,性别,居住地,这些信息存在数据库的时候,姓名直接存姓名,但是性别和居住地一般会用数据字典的编号存到数据库,比如:111代表男,222代表女,数据库存的就是111或222,如果用entity的话,把111、222前端都不知道是什么玩意,就算前端知道111代表男,222代表女,写了一个js判断数据处理。后来数据库变动了,111代表女,222代表男,前端的js又需要重新写,很显然这样不利于维护。所以就需要model来解决,后台从数据库取了数据转化为前端需要的数据直接传给前端,前端就不需要对数据来处理,直接显示就行了。还有一种情况,数据库里面的user表字段有十个,包含姓名,qq,生辰八字乱七八糟的等,但是前台页面只需要显示姓名,如果把entity全部传给前台,无疑传了很多没用的数据。这时候model就很好的解决了这个问题,前台需要什么数据,model就包含什么数据就行了。

4.3 domain

domain(域)
domain这个包国外很多项目经常用到,字面意思是域的意思。范围有点广了,比如一个商城的项目,商城主要的模块就是用户,订单,商品三大模块,那么这三块数据就可以叫做三个域,domain包里就是存的就是这些数据,表面上这个包和entity和model包里存的数据没什么区别,其实差别还是挺大的,特别是一些大型的项目。比如一个招聘网站的项目,最重要的对象就是简历了,那么简历是怎么存到数据库的呢,不可能用一张表就能存的,因为简历包含基本信息和工作经验,项目经验,学习经验等。基本信息可以存在简历表,但是涉及到多条的就不行,因为没人知道有多少条工作经验,项目经验,所以必须要单独建工作经验表和项目经验表关联到简历基本信息表。但是前台页面是不关心这些的,前台需要的数据就是一个简历所有信息,这时就可以用到domain来处理,domain里面的类就是一个简历对象,包含了简历基本信息以及list的工作经验,项目经验等。这样前端只需要获取一个对象就行了,不需要同时即要获取基本信息,还要从基本信息里面获取工作经验关联的简历编号,然后再去获取对应的工作经验了。

注意:
1.entity字段必须和数据库字段一样
2.model,前端需要什么我们就给什么
3.domain很少用,代表一个对象模块

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值