软件体系结构【4】MVC体系结构风格、分层风格
MVC是模型(Model),视图(View)和控制(Controller)的缩写,是⼀种设计创建 Web 应⽤程序的模式。
最典型的MVC就是JSP + servlet + javabean的模式。
Model(模型)表⽰应⽤程序核⼼功能与数据(⽐如数据库记录列表)。
View(视图)负责为⽤户显⽰信息(数据库记录)。⼀个模型可能拥有多个视图。
Controller(控制器)处理输⼊(写⼊数据库记录)。
模型的责任
从数据库取出数据,并且赋予数据变量
负责业务逻辑实现
负责数据验证,然后将数据存⼊数据库
视图的责任
获取⽤户输⼊
向controller发送处理请求
接收来⾃Controller的反馈并将model的处理结果显⽰给⽤户
控制器的责任
接收来⾃客户的请求
调⽤model业务逻辑⽅法
调⽤View显⽰执⾏结果
MVC交互⽰意图
对于数据更新,MVC采⽤改变-传播机制(change-propagation)
如果⽤户通过⼀个view的controller改变了model,所有的view必须反映出该改变。
当数据发⽣变化的时候,model通知所有的view,告诉他们数据已经改变了;
Views可以遍历model中的数据,以便发现到底是什么改变了。然后更新显⽰数据。
使⽤观察者模式的MVC架构类图
使⽤MVC架构:
1)容易增加或者改变视图。
事务逻辑被封装在Model中,所以在新增加⼀个视图的时候,不必要改动模型,⽽是因为业务逻辑都是⼀样的,所以只需要新增加⼀个视图类即可。
2) 容易独⽴地更新每个独⽴的软件模块
由于⼀个应⽤被分离为三个软件模块,因此,我们可以独⽴地改变其中的⼀个模块,⽽不影响其它两个模块。例如,⼀个应⽤的业务流程或者业务规则的改变只需改动MVC的模型层。
3) 代码易开发易维护
4) 业务逻辑更易测试
-不适合⼩型,中等规模的应⽤程序,花费⼤量时间将MVC应⽤到规模并不是很⼤的应⽤程序通常会得
不偿失;
-对于简单的界⾯,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产⽣过多的更新操作,降低运⾏效率;
-视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应⽤是很有限的,反之亦然,这样就妨碍了他们的独⽴重⽤;
-依据模型操作接⼝的不同,视图可能需要多次调⽤才能获得⾜够的显⽰数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
2、分层风格
分层系统采⽤多个层次组织,每⼀层必须起且仅起两个作⽤:
(1)使⽤下层提供的功能。
(2)为上层提供服务。
最底层通常由硬件连接。
⼴为⼈知的分层系统的应⽤是TCP/IP五层⽹络模型、操作系统、数据库系统等。
优点:
–⽀持逐层抽象的系统设计,有利于设计者对⼀个复杂系统进⾏分解;
–⽀持更新,因为每⼀层⾄多和相邻的上下层交互,因此功能的改变通常只影响相邻的上下层;
–⽀持复⽤,如果某独⽴层保证了功能的完整性并且提供了⽂档化的接⼝,便可在多个语境中复⽤。⼀组标准接⼝也可以使⽤各种不同的实现⽅法。
–⽀持测试。具有定义明确的层接⼝以及交换层接⼝的各个实现的能⼒提⾼了可测试性。
缺点:
§并不是每个系统都可以很容易地划分为分层的模式,甚⾄即使⼀个系统的逻辑结构是层次化的,出于对系统性能的考虑,系统设计师不得不把⼀些低级或⾼级的功能综合起来;
§效率的降低:
–由分层风格构成的系统,运⾏效率往往低于整体结构。
–在上层中的服务如果有很多依赖于最底层,则相关的数据必须通过⼀些中间层的若⼲次转化,才能传到;
§很难到合适的、正确的层次抽象⽅法:
–层数太少,分层不能完全发挥这种风格的可复⽤性、可更改性和可移植性上的潜⼒。
–层数过多,则引⼊不必要的复杂性和层间隔离冗余以及层间传输开销。
–⽬前,没有可⾏的⼴为⼈们所认可的层粒度的确定和层任务的分配⽅法。
照旧⼀个栗⼦ 。这⾥主要讲解三层架构。
三层架构是近年来经常使⽤的软件体系结构。该体系结构可以分为通⽤的3层架构与运⾏在互联⽹上的三层架构软件,这⾥说的是前者。
传统的三层层次体系结构
显⽰层(Presentation layer):
显⽰层通常包括⽤户图形界⾯,⽤于⽤户输⼊、⽤户请求与显⽰⽤户请求的返回结果等。
显⽰层调⽤应⽤层组件的过程,函数或者⽅法。但是应⽤层从来不会调⽤显⽰层的功能。
应⽤层(Application layer):或者称为业务逻辑(Business Logic)层。主要包括应⽤的业务逻辑,实现了应⽤的商业功能。
该层的组件封装了应⽤的核⼼数据与功能。
mvc的controller在该层中,如果要访问数据库或者要将程序运⾏中产⽣的数据存储到数据库,必须调⽤永久数据存储层的相应的数据库访问⽅法,⽽不能直接访问数据库。
永久数据存储层(Permanent Data Storage layer):该层包含数据库的访问与将永久数据存储到数据库中的功能。
在Java实现中,该层包含了利⽤JDBC写的数据库访问代码。
该层不能调⽤应⽤层与显⽰层,⽽只能将执⾏应⽤层的请求对数据库的访问结果返回给应⽤层。⽽应⽤层有可能将该数据返回给显⽰层
3、三层层次架构与MVC软件体系结构的⽐较
在形式上,三层架构类似于MVC 架构,都是由三部分软件模块组成的,但是实际上它们是不同的。
两种架构相似之处如下:
1. 都是由三部分软件模块组成的
2. 三层架构的显⽰层与MVC架构的View类似;
3. 三层架构的应⽤层与MVC架构的Model类似。
三层体系结构与MVC体系结构的区别如下:
1. 各个模块之间的调⽤关系不同:
三层架构的⼀个根本原则是显⽰层不能直接越过应⽤层直接调⽤永久数据存储层的代码。⾸先显⽰层必须调⽤应⽤层,然后再由应⽤层的相关的⽅法转⽽调⽤永久数据存储层。不允许有相反⽅向的调⽤。因此,三层架构的交互是线性的;
MVC架构的程序组件之间的交互是三⾓形的:View对象发送更新给Controller对象,Controller对象更新Model对象,并且View对象直接地从Model对象得到更新。
2. 对数据库的访问⽅式不同:
三层架构指定⼀个永久数据访问层,所有对数据库的访问均有此层承担;
MVC架构没有指定专门的数据库访问模块,⼀般的情况下是由Model直接访问数据库,但是也没有排除Controller中直接访问数据库的可能。
3. 关于控制模块的不同:
MVC架构中存在⼀个专门的Controller模块;
⽽层次架构中通常没有这样专门的模块。事实上,很多设计者在层次架构中的应⽤层⾥⾯单独地指定⼀个类似的控制模块。
使⽤观察者模式的3层层次架构与MVC架构
值得注意的是,在3层架构中,应⽤层与表⽰层之间使⽤观察者模式必然会导致应⽤层对显⽰层的调⽤(notifyObservers()),这违反了层次架构的原则。但是考虑到采⽤观察者机制更新图形界⾯的效率,以上的⼩⼩的“违规”也是值得的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论