2020-10-27 Java框架小记_三层架构/MVC设计模式/SSH框架

1.三层架构和MVC设计模式简介:
        项目开始,首先需要进行架构设计,一般采用的就是分层式的架构设计,即三层架构;然后,在确定了架构以后,再根据项目的具体需求去考虑是否需要应用一些设计模式,比如是否应用MVC模式,抽象工厂模式等等。

三层架构(UI-BLL-DAL)

       将整个项目划分为:表现层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer):

       表现层(UI):通俗讲就是展现给用户的界面,用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面;

       业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者。也将业务逻辑层称为领域层;

       数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增、删、改、查。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。也称为是持久层。数据访问层中包含实体层(Model 实体层)。

MVC设计模式(Model-View-Controller)

即Model(模型),View(视图),Controller(控制):

M:模型层,主要是负责一些具体的业务逻辑的实现;

V:视图层,可以理解为JSP页面;

C:控制器层,用于接受页面请求与响应请求到JSP页面的控制机制。

可以看到MVC将三层架构中的UI分成了控制层和视图层,将三层架构中的数据访问层和业务逻辑层整合成了模型层。

2.三层架构和MVC设计模式区分:
JavaWeb中典型的三层架构是:Jsp+Struts/Spring+Hibernate的开发模式,JSP开发中的分层都是基于MVC架构。

三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目,MVC只是三层架构思想的一种设计模式;MVC是一种设计模式,可以用它来创建在域对象和UI表示层对象之间的区分,它是根据项目的具体需求来决定是否适用于该项目,而SSH框架只是MVC模式实现的一种工具。

三层架构和MVC设计模式侧重点不一样:三层是一种笼统的架构思想,没有限制具体的设计;而MVC就比较具体的说明它的设计方法。

三层侧重的是整体的一个解耦;而MVC侧重的是web系统的解耦,即侧重jsp和Servlet的一个解耦,MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。

3.框架、设计模式和架构:

框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。
在软件生产中有三种级别的重用:
        内部重用,即在同一应用中能公共使用的抽象块;
        代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;
        应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。

框架是大智慧,用来对软件设计进行分工;
设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度(是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象)。

框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示,设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。

4.框架模式有哪些?
MVC、MTV、MVP、CBD、ORM等等;
框架有哪些?
C++语言的QT、MFC、gtk,Java语言的SSH 、SSI,php语言的 smarty(MVC模式),python语言的django(MTV模式)等等
设计模式有哪些?
工厂模式、适配器模式、策略模式等等


1. 面向接口编程:表示层调用控制层,控制层调用业务层,业务层调用数据访问层。

2. Dao是厨房的小工,和原材料(通过hibernate操作数据库)打交道的事情全是ta管(对数据库的增删改查);
    Service是厨师,Action送来的菜单上的菜全是ta做的(接口,一些方法);
    Action像是服务员,顾客点什么菜,菜上给几号桌,都是ta的职责。

3. 传统的Java Web应用程序是采用JSP+Servlet+Javabean的模式来实现的,这种模式是最典型的MVC
    负责前台展示的JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean

结合了SSH架构,最基本的分层方式:
3.1 Modle层→
就是对应的数据库表的实体类(是模型,存放实体类);
暂时存储数据方便持久化(存入数据库或者写入文件),作为一个包裹封装一些数据来在不同的层以及各种java对象中使用;
entity又叫POJO(Plain Old Java Object):最原始的Java类,用于将数据表封装为Java模型,一般这里面会以属性的形式,记录数据表的字段,通过getter/setter方法来操作,对应字段的信息,这也可以理解为面向对象中的封装。

3.2 Dao层(Data Access Object)/数据访问层→
使用了Hibernate连接数据库、操作数据库;是一个接口实现,通过SessionFactory获得操作数据库的会话,并实现一些基本的删除 添加 修改数据,在service中更实际话业务操作;
用来访问数据库实现数据的持久化(把内存中的数据永久保存到硬盘中)只操作数据库,每个dao只针对一张表操作,可以理解为一张数据表,就有一个Dao与之对应一般定义为dao层包括dao,daoImpl,分别为数据层接口和数据层实现类,通用的biz,业务逻辑层也是这样。

3.3 Biz层/Service层/业务层→
引用对应的Dao数据库操作,在这里可以编写自己需要的代码(比如简单的判断--做相应的业务逻辑处理),事务控制就放在biz层,主要用于处理某一类业务的处理流程。

3.4 Action层(业务层的一部分)/servlet层→
引用对应的Service层,在这里结合Struts的配置文件,跳转到指定的页面,也能接受页面传递的请求数据,也可以做些计算处理(获得Form表单数据,并处理逻辑的类);是MVC中的控制器,主要用于接受JSP的页面请求和响应请求。
servlet主要处理页面过来的信息,比如将一个表单的信息插入数据库,一般是将这些信息组成一个javaBean,组合的过程就是在servlet里实现,然后将这个实体传递给bizImpl.如果还需要对这个实体做别的修改,这个修改操作就在BizImpl里实现,全部处理完成后传递给DaoImpl.完成数据保存。

----因此整个流程是JSP页面发起请求到servlet,获取请求,交个Biz层,在Biz层中通过一系列对数据表的操作,这就要结合Dao和entity的作用,完成业务逻辑,然后,响应给servlet,由servlet,再响应出JSP 页面;
jsp传参到servlet层,servlet层用entity进行对象的封装,servlet层调用service层的方法,service层调用dao;
以上Hibernate,Struts都需要注入到Spring的配置文件中,Spring把这些联系起来,成为一个整体


SSH框架(一种企业级Web应用程序开源集成框架):

1.ssh的层次划分:
进行javaWeb开发很多时候我们按照这样的层次进行划分:
在表示层中,首先通过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),然后Struts根据配置文件(struts-config.xml)将ActionServlet接收到的Request委派给相应的Action处理,然后action进行对请求处理并转发给JSP页面。
在业务逻辑层中,管理服务组件的Spring IOC容器负责向Struts2提供具体的Action对象,提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。
在数据访问层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果,给业务逻辑层。

传统mvc ssh介绍:
Structs请求,给Spring处理,将结果返回给Hibernate做持久化
反过来,Hibernate将底层数据取出来,交给Spring,由Spring处理,将结果返回客户端Struts。

M(模型层):hibernate处理我们的业务bean与数据库交互,把数据库变为我们能够使用的java实体类去操作数据模型。

V(视图层):就是跟用户打交道的,常用的就是jsp、html等,还有现在很多的UI Spring 

C(控制器):处理请求及跳转,找到对应的业务bean进行处理,根据结果返回
由jsp页面的的访问就可以看出 .do .action对应的都是action的请求路径,那么struts才是控制器,由struts的控制器你才能找到对应的ActionBean。
Spring具体来说不在这其中,只做解耦,就是控制反转或者叫依赖注入用的。
传统的Servlte需要我们new一些对象才能使用,那么有N多的servlte就需要new N次,但是如果你的对象类一旦改变了,那就需要改N个servlet,这个new的本身也就是非常麻烦的。
而使用spring定义成一个bean,那有需要的地方就可以set进去了,就叫注入,改变原来的类只需要在spring里去改配置就可以。
业务bean从Spring代理里获取到对象,不需要我们去找对象new,减少了耦合。
在Spring3.0之后集成了mvc的功能 也可以做M也可以做C。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值