[置顶] 三层架构 VS MVC

一、三层架构

 1、表现层(UI):展现给用户的界面,用户在使用一个系统 的时候他的所见所得。

 2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操 作,对数据业务逻辑处理。

 3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、 删除、修改、更新、查找等。

 4、实体层(Model):倾向于业务逻辑层(三层),用来封装数据,三层间传送数据,不知道各个层次,独立于三个层次,Model不引用各层次,但三个层都会引用Model。

优点:

低耦合、高重用和使用、低开发成本、快速部署、可维护、利于软件开发管理

二、MVC

1、概念

        是XeroxPARC在八十年 代为编程语言Smalltalk-80发明的一种软件设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。

M即Model(模型层),主要负责出来业务逻辑以及数据库的交互

V即View(视图层),主要用于显示数据和提交数据,是用户看到并与之交互的界面。

C即Controller(控制器),主要是用作捕获请求并控制请求转发

视图

        能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。

模型

        模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

控制器

        控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。

小结:

      首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。

[置顶] 三层架构 VS MVC_第1张图片

2、为什么用?

      大部分Web应用程序都是用像ASP,PHP过程化语言来创建的。它们将像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心的计划和不断的尝试。MVC从根本上强制 性的将它们分开。尽管构造MVC应用程序需要一些额外的工作,但是它给我们带来的好处是无庸质疑的。

3、一条创建软件的好途径

        如果你要隔离模型、视图和控制器的构件,你可能需要重新思考你的应用程序,尤其是应用程序的构架方面。如果你肯接受MVC,并且有能力应付它所带来的额外的工作和复杂性,MVC将会使你的软件在健壮性,代码重用和结构方面上一个新的台阶。

4、好处与不足

好处:

首先,多个视图能共享一个模型,现在需要用越来越多的方式来访问你的应用程序。无论你的用户想要什么界面;用一个模型就能处理它们。由于你已经将数据和业务规则从表示层分开,所以你可最大化的重用你的代码(视图)。

        由于模型返回的数据没有进行格式化,所以同样的构件能被不同界面使用。模型是自包含的,并且与控制器和视图相分离,所以很容易改变你的应用程序的数据层和业务规则。如果你想把你的数据库从MySQL移植到 Oracle,只需改变你的模型即可。一旦你正确的实现了模型,不管你的数据来自数据库或是LDAP服务器,视图将会正确的显示它们(模型)。      

        可以使用控制器来联接不同的模型和视图去完成用户的需求(控制器)

不足:

       由于它没有明确的定义,所以完全理解MVC很不容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。同时由于模型和视图要严格的分离,这样也给调试应用程序到来了一定的困难。每个构件在使用之前都需要经过彻底的测试。一旦你的构件经过了测试,你就可以毫无顾忌的重用它们了。

        由于我们将一个应用程序分成了三个部件,所以使用MVC同时意味着你将要管理比以前更多的文件,这一点是肯定的。好像我们的工作量增加了,但请记住它的好处

        MVC并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。

三、相同与不同

细分后:View(UI)、BIZ(BLL)、DAO(DAL)、Entity(Model)、Controller

MVC把BIZ(BLL)、DAO(DAL)、Model(Entity) 统一称之为 模型(MODEL),得View、Controller、模型(MODEL)

三层暂未体会到控制器的存在,完全是:UI、DAO、BLL

相同点:

       同样是架构级别的,他们都有一个表现层;

       把视图设计与数据持久化进行分离,从而降低耦合性,易于扩展,提高团队开发效率。

不同点:

      三层架构是最基本的项目分层结果,而MVC则是三层架构的一个变体,MVC是一种好的开发模式,我们可以用它来创建在域对象和UI表示层对象之间的区分。

       三层”中典型的Model层是已实体类构成的,而MVC里,Model则是由业务逻辑与访问数据组成的,它的分层也是为了结构清晰和低耦合,(高内聚:单一责任;低耦合:模块独立),区别比较大的就是三层架构中没有Control层,而是由单个页面上的控件的事件处理页面与业务逻辑之间,而MVC中control层是作为联系视图层和Model的纽带,使得整个项目的结构更加清晰,降低了耦合性。

 四、如何取舍

他们相同的设计理念就是:三层是基于业务逻辑来分的,而mvc是基于页面来分的,根本就没有什么可比性。

        MVC模式是一种复合设计模式,一种解决方案

        三层是种软件架构,通过接口实现编程

        三层模式是体系结构模式,MVC是设计模式

        三层模式又可归于部署模式,MVC可归于表示模式

        在所谓的“三层”中,它要求你将BLL层独立出来,它只是告诉你表示层和业务逻辑层之间的静态关系。而MVC则告诉你 在这个具体的地方如何处理其动态驱动流程,尽管mvc仍然粗糙(甚至mvp也是粗糙的),但是已经比所谓三层更细致一些了。

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

五、实例

       举例说明这两种方法不同的实现思路:A在廊坊爱明道逛街,有人要抢劫他,打110报警了,B在广阳道也被劫持,他也打110报警了,他们打110的时候,接电话的是廊坊市市公安局总部指挥中心,对于A,来解救他是爱明道分局的警察,对于B,解救他的是光阳道分局的警察,对于AB来说,他们不需要关心到底是谁来解救他的,他们只管打110报警(类似于页面数据由action提交到控制器),由110指挥中心确定他的位置然后派出具体的地方警局去营救(控制器根据需求调用model层去完成对应的数据处理)。而三层架构在这个过程中就像A或B被劫持了,他们直接找到当地警(调用BLL层方法)的警察来处理。

       由于运用MVC的应用程序的三个部件是相互对立,改变其中一个不会影响其它两个,所以依据这种设计思想你能构造良好的松偶合的构件。

        理解的不是很深入,以后随着学习的深入再补充!

你可能感兴趣的:([置顶] 三层架构 VS MVC)