三层架构的魅力:界面层、业务逻辑层与数据访问层
三层架构的魅力:界面层、业务逻辑层与数据访问层
dong4j框架模式和设计模式的区别
有很多程序员往往把框架模式和设计模式混淆,认为 MVC 是一种设计模式。实际上它们完全是不同的概念。
框架、设计模式这两个概念总容易被混淆,其实它们之间还是有区别的。框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块; 代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。
框架与设计模式虽然相似,但却有着根本的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示; 设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。
框架模式有哪些?
MVC、MTV、MVP、CBD、ORM 等等;
框架有哪些?
C++ 语言的 QT、MFC、gtk,Java 语言的 SSH 、SSI,php 语言的 smarty(MVC 模式),python 语言的 django(MTV 模式) 等等
设计模式有哪些?
工厂模式、适配器模式、策略模式等等
简而言之:设计模式是大智慧,用来对软件设计进行分工;框架模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。
MVC 框架 (MVC 模式)
SUN 公司推出 JSP 技术后推荐的两种 web 应用开发模式:
JSP + JavaBean (Model1)
- 在这种模式中,JSP 页面独自响应请求并将处理结果返回客户,所有的数据库操作通过 JavaBean 来实现。
- 大量地使用这种模式,常会导致在 JSP 页面中嵌入大量的 Java 代码,当需要处理的商业逻辑非常复杂时,这种情况就会变得很糟糕。大量的 Java 代码使得 JSP 页面变得非常臃肿。前端的页面设计人员稍有不慎,就有可能破坏关系到商业逻辑的代码。
- 这种情况在大型项目中经常出现,造成了代码开发和维护的困难,同时会导致项目管理的困难。因此这种模式只适用于中小规模的项目。
- JSP+JavaBean 模式适合开发业务逻辑不太复杂的 web 应用程序,这种模式下,JavaBean 用于封装业务数据,JSP 即负责处理用户请求,又显示数据。
JSP + Servlet + JavaBean (Model2) –> MVC
MVC 全名是 Model View Controller,是模型 (model)-视图 (view)-控制器 (controller) 的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC 被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
MVC 是一个框架模式,它强制性的使应用程序的输入、处理和输出分开。使用 MVC 应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。
- 模型部分包含了应用程序的业务逻辑和业务数据
- 封装应用状态 –>数据封装 (vo)
- 响应状态查询 –>获取数据 (vo)
- 暴露应用的功能 –>逻辑层 API
- 视图部分封装了应用程序的输出形式
- 产生 html 响应 –>展示数据
- 请求模型的更新 –>触发事件
- 提供 html form 用于用户请求 –>人机交互
- 控制器部分负责协调模型和视图,根据用户请求来选择要调用哪个模型来处理业务,以及追踪由哪个视图为用户做出应答
- 接收并验证 http 请求的数据 –>收集数据,封装数据
- 将用户数据与模型的更新相映射 –>调用逻辑层 API
- 选择用于响应的视图 –>根据返回值选择下一个页面
Servlet = Java + html –>拼字符太麻烦
JSP = html + java 脚本 –>页面和逻辑太过于混杂
使用纯 jsp 写 web 应用时,在 jsp 页面上写的代码太多,尤其是控制代码,页面和逻辑混杂在一起,因此需要引入一个中间层 –>控制器来控制处理控制代码
MVC 的组件关系图描述了模型,视图,控制器的交互关系
- 首先是展示视图给用户,用户在这个视图上进行操作,并填写一些业务数据
- 然后用户点击提交按钮,发出请求 (login.av–>LoginServlet)
- 视图发出的请求会被控制器拦截,请求中包含了想要完成什么样的业务功能和相关数据 (从 request 中取得表单数据)
- 控制器会处理用户请求,会把请求中的数据进行封装 (封装成一个 JavaBean),然后选择调用合适的模型,请求模型进行状态更新 (调用逻辑层 API,根据不同的返回结果调用调用不同的页面显示信息),然后选择接下来要展示给用户的视图
- 模型会去处理用户请求的业务功能,同时进行模型状态的维护和更新
- 当模型状态改变的时候,模型会通知相应的视图告诉自己发生了改变
- 视图接收到模型的通知后,会向模型进行状态查询,获取需要展示的数据,然后按照本身的展示方式,把这些数据展示出来,等待用户的下一次请求.
Model2 开发步骤
- 定义一系列 Bean 来表示数据
- 使用 Servlet 处理请求
- 在 Servlet 中填充数据
- 在 Servlet 中,将 Bean 存储到请求,会话或者 Applaction 作用域中
- 将请求转发到 jsp 页面
- 在 jsp 页面中,从 Bean 中提取数据
三层架构
三层架构 (3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。