Web开发的分层架构与MVC模式
设计模式(Design Pattern)是前辈们对代码开发经验的总结,代表了最佳的实践是解决特定问题的⼀系列套路。这些解决⽅案是众多软件开发⼈员经过相当长的⼀段时间的试验和错误总结出来的。它不是语法规定,⽽是⼀套⽤来提⾼代码可复⽤性、可维护性、可读性、稳健性以及安全性的解决⽅案。
三层架构:表述层(WEB层)、业务逻辑层(Business Logic),以及数据访问层(Data Access)
2.java有哪些设计模式
创建型模式,共五种:⼯⼚⽅法模式、抽象⼯⼚模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
⾏为型模式,共⼗⼀种:策略模式、模板⽅法模式、观察者模式、迭代⼦模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
3.MVC是什么设计模式
GoF(Gang of Four,四⼈组,《Design Patterns: Elements of Reusable Object-Oriented Software》/《设计模式》⼀书的作者:Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)并没有把MVC提及为⼀种设计模式,⽽是把它当做“⼀组⽤于构建⽤户界⾯的类集合”。在他们看来,它其实是其它三个经典的设计模式的演变:观察者模式(Observer)(Pub/Sub),策略模式(Strategy)和组合模式(Composite)。根据MVC在框架中的实现不同可能还会⽤到⼯⼚模式(Factory)和装饰器(Decorator)模式。
也就是说MVC并不在23中设计模式中,mvc属于构架模式,⼀个构架往往⽤到多个设计模式。除了MVC架构模式,还有MVP,MVVM架构模式等。
4.为何要使⽤MVC
MVC模式最主要精神之⼀就是Model与View的分离,这两者之间的分离可使⽹页设计⼈员和程序开发⼈员能够独⽴⼯作、互不影响,从⽽提⾼了开发效率和维护效率。除此之外,将模型层的数据处理建⽴成许多组件,增加了程序的可复⽤性、增进了系统功能的可扩展性;将业务流程集中在控制层,增强了程序流程的清晰度.
5.MVC各层的作⽤
Model(模型)层
是应⽤系统的核⼼层,负责封装数据和业务逻辑操作,模型层可以分为数据模型和业务模型。数据模型⽤来对⽤户请求的数据和数据库查询的数据进⾏封装;业务模型⽤来对业务处理逻辑进⾏封装。(这个层现在知道可以放dao和JavaBean。JavaBean是如果我⼀次要取10个数据,封装起来,就可以放在javaBean中。)
View (视图)层
视图提供模型的表⽰,它是应⽤程序的外观,是直接和⽤户交互的界⾯。它⼀⽅⾯向⽤户显⽰相关的数据,另⼀⽅⾯⽤来接收⽤户的输⼊数据,提交给控制器处理。HTML css js jsp这些都是视图层的。
Controller(控制器)层
主要的⼯作就是控制整个系统处理的流程,控制器对⽤户的请求做出处理。它创建并调⽤模型的相关数据业务处理⽅法,选择相应的视图返回给客户端。
(例如:servlet在MVC模式中就是⼀个控制器,核⼼功能就是处理请求,把视图层的请求发给servlet,servlet就可以处理请求,使⽤getParameter()取到前端发来的数据。处理数据交给dao,这是模型层。Dao处理完了,处理的结果,返回值。结果给servlet.servlet根据结果选择⼀个合适的视图,给⽤户⽣成相应。)
总的来说, MVC处理过程为:⾸先控制器接收⽤户的请求,并选择相应的模型去处理;模型根据控制器的调⽤进⾏相应的业务处理逻辑,并返回数据给控制器;最后控制器选择相应的视图将数据显⽰给客户端⽤户。
⼆:1.关于三层架构:
我们常说的三层架构是由JavaWeb提出的,也就是说这是JavaWeb独有的!所谓三层是表现层(WEB层)、业务逻辑层(Business Logic),以及数据访问层(Data Access)。开发中更多的是⽤到三层架构。很少提及MVC。
2.三层架构各层的作⽤
三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应⽤划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的⽬的即为了“⾼内聚,低耦合”的思想。
1、表现层(UI,也称⽤户接⼝层):通俗讲就是展现给⽤户的界⾯,即⽤户在使⽤⼀个系统的时候他的所见所得。
2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
3、持久化层(数据层DAL):其功能主要是负责数据库的访问,可以访问数据库系统、⼆进制⽂件、⽂本⽂档或是XML⽂档。简单的说法就是实现对数据表的Select,Insert,Update,Delete的操作。如果要加⼊ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。
概述:
在软件体系架构设计中,分层式结构是最常见,也是最重要的⼀种结构。
3.三层架构各层详细说明与原理
3个层次中,系统主要功能和业务逻辑都在业务逻辑层进⾏处理。
所谓三层体系结构,是在客户端与数据库之间加⼊了⼀个“中间层”,也叫组件层。这⾥所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应⽤才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到⼀台机器上。
三层体系的应⽤程序将业务规则、数据访问、合法性校验等⼯作放到了中间层进⾏处理。通常情况下,客户端不直接与数据库进⾏交互,⽽是通过COM/DCOM通讯与中间层建⽴连接,再经由中间层与数据库进⾏交互。
表⽰层
位于最外层(最上层),离⽤户最近。⽤于显⽰数据和接收⽤户输⼊的数据,为⽤户提供⼀种交互式操作的界⾯。
业务逻辑层
业务逻辑层(Business Logic Layer)⽆疑是系统架构中体现核⼼价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,也将业务逻辑层称为领域层。例如Martin Fowler在《Patterns of Enterprise Application Architecture》⼀书中,将整个架构分为三个主要的层:表⽰层、领域层和数据源层。作为领域驱动设计的先驱Eric Evans,对业务逻辑层作了更细致地划分,细分为应⽤层与领域层,通过分层进⼀步将领域逻辑与领域逻辑的解决⽅案分离。
业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表⽰层中间,起到了数据交换中承上启下的作⽤。由于层是⼀种弱耦合结构,层与层之间的依赖是向下的,底层对于上层⽽⾔是“⽆知”的,改变上层的设计对于其调⽤的底层⽽⾔没有任何影响。如果在分层设计时,遵循了⾯向接⼝设计的思想,那么这种向下的依赖也应该是⼀种弱依赖关系。因⽽在不改变接⼝定义的前提下,理想的分层式架构,应该是⼀个⽀持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于⼀个⽀持可扩展的架构尤为关键,因为它扮演了两个不同的⾓⾊。对于数据访问层⽽⾔,它是调⽤者;对于表
⽰层⽽⾔,它却是被调⽤者。依赖与被依赖的关系都纠结在业务逻辑层上,如何实现依赖关系的解耦,则是除了实现业务逻辑之外留给设计师的任务。
数据层
数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问,可以访问数据库系统、⼆进制⽂件、⽂本⽂档或是XML⽂档。
简单的说法就是实现对数据表的Select,Insert,Update,Delete的操作。如果要加⼊ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。
4.关于三层架构的补充与实际应⽤
在实际的开发中,因为项⽬的⼤⼩不同,分层会有表现上的差异,⽐如业务逻辑层会分层⼏层 controller dm BLL。⽽dao层可能也分为两部分,要灵活使⽤。
三1.三层架构与MVC有关系吗
三层架构与MVC毫⽆关系。三层是基于业务逻辑来分的,mvc是基于页⾯来分的。
三层是从整个应⽤程序架构的⾓度来分的三层(如果程序需要,还可以分多层)。
三层是为了解决整个应⽤程序中各个业务操作过程中不同阶段的代码封装的问题,为了使程序员更加专注的处理某阶段的业务逻辑。
⽐如将数据库操作代码封装到⼀层中,提供⼀些⽅法根据参数直接返回⽤户需要的相应数据,这样在处理具体的业务逻辑的时候,就不⽤关⼼数据的存储问题了。
MVC是在应⽤程序(BS结构)的视图层划分出来的不同功能的⼏个模块。
MVC主要是为了解决应⽤程序⽤户界⾯的样式替换问题,把展⽰数据的 HTML 页⾯尽可能的和业务代码分离。MVC把纯净的界⾯展⽰逻辑(⽤户界⾯)独⽴到⼀些⽂件中(Views),把⼀些和⽤户交互的程序逻辑(Controller)单独放在⼀些⽂件中,在 Views 和 Controller 中传递数据使⽤⼀些专门封装数据的实体对象,这些对象,统称为Models。
只所以说MVC和三层毫⽆关系,是因为它们⼆者使⽤范围不同:三层可以应⽤于任何语⾔、任何技术的应⽤程序;⽽MVC只是为了解决BS 应⽤程序视图层各部分的耦合关系。它们互不冲突,可以同时存在,也可根据情况使⽤其中⼀种
但是他们有相同的设计理念:把视图设计与数据持久化进⾏分离,从⽽降低耦合性,易于扩展,提⾼团队开发效率。
2..MVC与三层架构的对应关系,图⽰如下:
四:SSM与三层架构的关系:
SSM即Spring+SpringMVC+MyBatis框架
SpringMVC作为View层的实现者,完成⽤户的请求接收功能。SpringMVC的Controller作为整个应⽤的控制器,完成⽤户请求的转发及对⽤户的响应。
MyBatis作为Dao层的实现者,完成对数据库的增删改查。
Spring以⼤管家的⾝份出现,管理所有Bean的⽣命周期,即整个应⽤中所有对象的创建、初始化、销毁,以及对象间关联关系的维护均由Spring管理。
JSP本质上其实就是个Servlet,所以JSP能做的事,⼀般来说Servlet也能做,JSP+Servlet+JavaBean开发模式可以克服⼀些
JSP+JavaBean模式的弊端,使开发逻辑更加清晰,系统扩展更加容易。在这种架构中,JSP主要负责页⾯展⽰,控制逻辑交给Servlet,JavaBean的职责不变(这也是为什么三层架构会出现)。举个简单的例⼦,假设浏览器有个登录界⾯,该界⾯是通过JSP技术展⽰的(页⾯展⽰),当⽤户输⼊⽤户
名和密码时,JSP端会把数据传递给Servlet,Servlet⾸先判断⽤户的输⼊是否符合要求,然后调⽤JavaBean(控制逻辑),⽽后由JavaBean来完成数据的封装以及调⽤数据库数据对数据进⾏判断(数据封装和业务逻辑)。
其实JSP+Servlet+JavaBean开发模式涵盖了MVC模型的思想,所谓MVC,是Model(模型)-View(视图)-Controller(控制器)的缩写,是⼀种⽤于设计创建 Web 应⽤程序表现层的模式,在这⾥可以把JavaBean看做模型,JSP看做视图,Servlet看做控制器。各个模块的功能如下:
Model(模型):完成数据的封装与传递,业务逻辑的处理,⽬前在Javaweb三层架构下主要指实体类,即域模型。
View(视图):⽤于数据的展⽰,通常指JSP和HTML。
Controller(控制器):接收⽤户的请求,处理数据,控制数据的流向,类似⼀个调度员。
上⾯提到,JavaBean也是⼀个祸害,既要数据封装⼜要业务逻辑处理,还要操作数据库,如果将它的功能进⾏拆解,就有了我们的三层架构。
三层架构分为表现层、业务层和持久层,其中MVC模型属于表现层。各个层的功能如下:
表现层:页⾯的展⽰,接收⽤户的请求,数据封装,数据的简单处理,调⽤业务层等
业务层:向上提供接⼝,事务管理,防SQL注⼊,调⽤持久层等
持久层:与数据库进⾏交互
三层架构的优缺点
优点:
1、⾼内聚,低耦合
2、⽅便维护,易于扩展
3、开发⼈员可以只关注某⼀层,有利于分⼯协作,加快开发速度
缺点:
1、降低了系统的性能。这是不⾔⽽喻的。如果不采⽤分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。jsp用什么前端框架
2、有时会导致级联的修改。这种修改尤其体现在⾃上⽽下的⽅向。如果在表⽰层中需要增加⼀个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码
3、增加了代码量,增加了⼯作量
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论