mvc框架优缺点,MVC与BS的区别,他们的优点及劣势是什么?
mvc框架优缺点,MVC与BS的区别,他们的优点及劣势是什么?详细介绍
本文目录一览: MVC模式有哪些优缺点?
其实我对MVC的理解就是,模型、控制、视图。模型就是数据库模型,控制就是控制前台和后台的数据交换,视图就是前端的数据展示和数据录入。
我是这么理解MVC的,可能有错误,不过这样的理解在我当初学习的时候给了我很大的好处。
举例说jsp+struts+hibernate+spring的这种框架,jsp就是视图层,可以理解为用来显示数据的;
struts是控制层,可以理解为怎么读取视图层的数据然后交给模型层,或者从模型层读取数据然后交给视图层;hibernate+spring是模型层,可以理解为数据结构的模型,或者说数据库的模型,当然,他们不是数据库,但是自从有了hibernate和spring以后,程序员基本不用考虑数据的解构了,只需要依据hibernate和spring提供的数据模型对数据操作就可以了。
我当初就是这么理解MVC框架的,如果楼主认为不妥的话,可以不考虑了。
如果别人有别的见解,可以提出来如我分享下。
逻辑清晰,易于维护,当然,前提是对MVC的透彻理解
优点:
1:耦合性低
视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
2:重用性高
随着技术的不断进步,需要用越来越多的方式来访问应用程序。MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码,因为多个视图能共享一个模型,它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。
MVC使开发和维护用户接口的技术含量降低。
3:部署快
使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。
4:可维护性高
分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。
5:有利软件工程化管理
由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。控制器也提供了一个好处,就是可以使用控制器来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择模型进行处理,然后选择视图将处理结果显示给用户。
缺点:
1:没有明确的定义
完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。
2:不适合小型,中等规模的应用程序
花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
3:增加系统结构和实现的复杂性
对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
4:视图与控制器间的过于紧密的连接
视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
5:视图对模型数据的低效率访问
依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
6:一般高级的界面工具或构造器不支持模式
改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,会造成MVC使用的困难。
MVC与BS的区别,他们的优点及劣势是什么?
b/s 是抽象意义上的用应架构,相对于传统上的c/s架构而言的,使得数据层和表现层进一步分离。
mvc是一种具体的编程架构,比如struts,已经定义好了框架,然后由你来具体实现,同理,ejb也是这样的。
就这些吧.希望能帮到你
对象不同:
MVC包括三类对象,Model是应用对象、View为其屏幕表示、Controller定义了对用户输入的处理方式。在应用MVC方式以前,通常将这三个对象的功能合到了一起,应用MVC分离了它们,为设计提供了灵活性和可重用性。
MVC设计模式是目前最流行的Web应用设计模式,给项目代码的管理和维护带来了很大的便利。
结构不同:
B/S结构(Browser/Server结构)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。
在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。
BS优点:可以在任何地方进行操作而不用安装任何专门的软件。系统的扩展非常容易,只要能上网,再由系统管理员分配一个用户名和密码,就可以使用了。甚至可以在线申请,通过公司内部的安全认证(如CA证书)后,不需要人的参与,系统可以自动分配给用户一个账号进入系统。
BS缺点:个性化特点明显降低,无法实现具有个性化的功能要求。BS操作是以鼠标为最基本的操作方式,无法满足快速操作的要求。BS页面动态刷新,响应速度明显降低。BS无法实现分页显示,给数据库访问造成较大的压力。BS功能弱化,难以实现传统模式下的特殊功能要求。
MVC优点:各施其职,互不干涉;在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。
MVC缺点:增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
asp.net mvc框架优缺点
asp.net mvc 优缺点:
不再有ViewState:传统的ASP.NET WebForm模式利用ViewState保存表单的状态信息,由于B/S程序本身的限制,ViewState存储数据需要在隐藏表单域里面放置很大一段字符串,这会大大增加页面的字节数,导致网页加载变慢;
简介的HTML:最终生成的 HTML代码完全由自己控制,不会生成任何“垃圾代码”;
更快的服务器端处理和客户端呈现:MVC只简单地处理“模板”,而无需构建复杂的控件树,因此,无论是在服务器处理的时间,和客户端的呈现速度都会有所提高;
为多种视图只需一种模型:有时候一个页面要显示的数据是同一个,但表现形式有细微的差别,此时只需要修改视图部分,可以采用现有的控制器行为;
单元测试:Webform的测试是很困难的,使用MVC,可以将业务逻辑与页面分离开,可以不在ASP.NET进程中执行控制器,方便测试
利用Routing特性提高ASP.NET MVC站点的SEO权重,URL地址友好
MVC优点:
1.大型开发的时候容易维护,扩展性很好。
2.能够对HTML有完全的控制权限,对于前端来说很友好。
3.能够进行单元测试,保证功能的实现。
缺点:
1.没有那么多的现成控件使用,开发效率相对较低(特别是对于菜鸟来说)
2.对于大型数据的处理比较难,还是因为没有现成girdview控件。这个控件虽然生成的html结构异常复杂,但是对于处理大量而且复杂的数据来说是很不错的。不过一般网站是很少有这种大量且复杂的数据,很多菜鸟都是用这个大炮来打蚊子,浪费且低效率。对于网站开发来说这个控件应该不推荐使用。
刚学的菜鸟和在需要快速开发的情况下用webform就很好。
需要可扩展性,高度控制性情况下用MVC好。但是用这个框架门槛相对较高,如果你只懂asp.net 的webform开发形式的话,因为webform已经帮你做了太多的事情,换句话说你根本不知道真正的web开发是怎么样的。反而精通php,asp的人更容易上手。
MVC和webform开发各有各的用途。
但是你不应该使用asp.net mvc框架,如果符合下面几条:
你对多态不是“非常”的熟悉
你不喜欢在这个框架上构建应用程序
你依赖于很多第三方的UI控件
你不喜欢使用开源的程序
MVC框架的优缺点
S-S-H是一个基于MVC框架组合,struts是一个具有良好可管理性的web应用框架,主要负责视图(使用struts标签来构建页面视图并且使用ActionSupport来接收并处理页面表单传回来的数据),spring是一个轻量级的容器,他的目标是来实现一个全方位的整合框架,利用spring框架来整合其他子框架,例如整合struts和hibernate;(比如说项目中的action和service都托管给spring来管理,达到一个全方位的整合框架,项目的action和service都通过xml配置文件来描述这个bean,spring通过配置路径直接加载这些bean,从而来管理这些javabean)hibernate是一个数据持久化中间件,他使业务逻辑和数据实现了松耦合,并且封装了所有的数据访问细节,使业务逻辑层专注于实现业务逻辑。(项目中在对数据库操作
的时候,因为hibernate托管给了spring,spring将使用他框架中的hibernate支持类(HibernateDaoSupport)的find,save,upedate,delete,deleteall等方法对数据库进行增删改查,若需要复杂的查询可以使用nativesql,常规查询)
增删改查>
同作为JavaScript MVC框架,Backbone和AngularJS各有什么优缺点
Backbone是一个轻量级MVC框架。
支持单向数据绑定。(Model -> View)。
我们可以定义我们自己的视图、模型和控制器。简化DOM中的事件绑定。对象映射。但因为很轻量,所以灵活性好。通常你可以自由搭配组合各种js库进行定制开发。API非常简单,没几个,基本上学习几个小时就可以轻松上手了。
AngularJS说实话我没亲自用过。不过它是一种MVVM框架。支持双向绑定。(视图<->模型)。使用它的优点是,绝大多数的DOM操作,都可以使用Diretives指令的方式完成,以一种特殊规则的写法,直接写到html当中。然后AugularJS帮你打交道,JS开发人员可以更好的从DOM中解脱出来,专心关注JS的逻辑和业务。 但是AngularJS非常重。而且学习成本高,内容比较多,且复杂。
写了这么多AngularJS代码,可以说我对AngularJS了解比较深入了。Backbone也是一个很热门的JS框架,我通读了一下它的API文档,大概了解了他的运行机制。
Backbone很精巧,很强大。但对比AngularJS,我说说我看到的Backbone的缺点,由于接触时间短,可能会存在误解,见谅。
Backbone的Model把服务器端的数据模型映射到浏览器端,绑定数据验证机制,并与相应的REST操作绑定,这样每个数据模型都变成了独立体,方便REST操作,却限制REST的灵活性。比如我要将10个todo批量标记成已完成,它会发出10个REST请求。
Backbone的Model没有与UI视图数据绑定,而是需要在View中自行操作DOM来更新或读取UI数据,这点很奇怪。AngularJS与此相反,Model直接与UI视图绑定,Model与UI视图的关系,通过directive封装,AngularJS内置的通用directive,就能实现大部分操作了,也就是说,基本不必关心Model与UI视图的关系,直接操作Model就行了,UI视图自动更新。而Model数据验证、与服务器端的数据交互都是非常简单而自由的。
AngularJS的directive,你输入特定数据,他就能输出相应UI视图,这样的directive可以变成了一个html通用组件,比如文章编辑器组件、分页导航组件、madal组件等,在不同应用中可以直接拿来用,减少重复开发。我想,Backbone大概很难实现这样的通用组件。
Backbone的View没有把html与JavaScript解耦,要控制UI视图,实际上就是用JavaScript控制DOM,或者通过第三方模板引擎控制HTML字符串,而这些,都需要程序员在代码中用JavaScript自行实现。
AngularJS不同,写UI视图就是写正常的HTML/CSS,写逻辑控制代码就是用JavaScript操控数据(不是DOM),不同的就是增加了directive,实现DOM与数据的互动,如上所述,directive是通用组件。AngularJS只是定义了一个环境和一个数据与视图交互的机制,并提供了若干通用组件和服务,所以AngularJS开发很简单,很高效,很“原生态”。
虽然我没有真正写过桌面应用程序,但我觉得AngularJS的理念就是把WEB当作应用程序来写——Web App。反观Backbone,对于数据与UI视图的互动并没有大的改进,仅仅提供了数据变更事件通知,它侧重于REST数据交互了,而REST数据交互本来是很容易处理的。
Backbone是一个轻量级MVC框架。
支持单向数据绑定。(Model -> View)。
我们可以定义我们自己的视图、模型和控制器。简化DOM中的事件绑定。对象映射。但因为很轻量,所以灵活性好。通常你可以自由搭配组合各种js库进行定制开发。API非常简单,没几个,基本上学习几个小时就可以轻松上手了。
AngularJS说实话我没亲自用过。不过它是一种MVVM框架。支持双向绑定。(视图<->模型)。使用它的优点是,绝大多数的DOM操作,都可以使用Diretives指令的方式完成,以一种特殊规则的写法,直接写到html当中。然后AugularJS帮你打交道,JS开发人员可以更好的从DOM中解脱出来,专心关注JS的逻辑和业务。 但是AngularJS非常重。而且学习成本高,内容比较多,且复杂。
mvc和三层架构到底有什么区别
我只说Java中的啊,mvc:m就是model层,v就是view ,c就是controller ,《1.》如果不用框架,只用servlet,那么controller就是我们自己写的servlet代码,然后view就是jsp代码,model通常就是一个javaBean, 在service和dao层来回携带数据;上面就是mvc;三层指的是action(controller) 层,service层 dao三层;
《2.》如果用框架struts,spring mvc,那么controller就是框架部分,我们通常写的是model模型部分,用它调用service层,view还是jsp,不知道你明白不?我给你两张图,希望你好好理解,
第一张是基于servlet和JavaBean的三层架构MVC ;第二张就是真正意义上的MVC三层架构,希望采纳啊,我是真心的回答你的
MVC和三层架构,是不一样的。
三层架构中,DAL、BLL、WEB层各司其职,意在职责分离。
MVC是 Model-View-Controller,严格说这三个加起来以后才是三层架构中的WEB层,也就是说,MVC把三层架构中的WEB层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话;而C层直接与三层中的BLL进行对话。
MVC就是三层架构的一种实现
M对应了三层架构中的业务逻辑和数据
V对应了三层架构中的表示层也就差不多是界面的意思吧
C是指接收用户的操作后通过M和V完成用户的需求
不就一样么
反正我是这么理解的
三层架构其实是大家片面的理解的一个MVC,其实还有4层,5层……
等等说话!
知不是不是官方的说法而已!!
在JAVA中叫MVC
不过也可以分七层
在.NET中才叫做三层模式
(它不叫架构)
MVC:是一种框架设计方式(Model View Controller),是模型(model)-视图(view)-控制器(controller)的缩写。提高了程序的可维护性、可移植性、可扩展性与可重用性,降低了程序的开发难度。
1.模型(model)它是应用程序的主体部分,主要包括业务逻辑模块和数据模块。模型与 数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一 次就可以被多个视图重用,所以减少了代码的重复性。
2.视图(view) 用户与之交互的界面、在web中视图一般由jsp,html组成。
3.控制器(controller)接收来自界面的请求 并交给模型进行处理 在这个过程中控制器不做任何处理只是起到了一个连接的作用。
MVC优点:
1.降低代码耦合性。在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其他层中的代码。
2.有利于分工合作。在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。网页设计人员可进行开发视图层中的JSP,而对业务熟悉的人员可开发业务层,而其他开发人员可开发控制层。
3.有利于组件的重用。如控制层可独立成一个能用的组件,表示层也可做成通用的操作界面。可以为一个模型在运行时同时建立和使用多个视图。
MVC缺点:
1.增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
2.视图层展示依赖与模型层,视图层需要很少的字段,但是模型层全部提供,性能上有一定影响
注意:mvc由于市场的需求,演变出三层框架
三层框架:按照高内聚低耦合的思想,形成一种标准的分层方式。分为三层:界面层(UserInterface layer)、业务逻辑层(BusinessLogic Layer)、数据访问层(Dataaccess layer)。
界面层:主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。
业务逻辑层:主要负责对数据层的操作。也就是说把一些数据层的操作进行组合。
数据访问层:也称为是持久层其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。完成CRUD的操作,数据交互及落地。
按照标准创建项目:
View-》控制层-》业务层-》dao层----加上common公用类层
具体分层见下图:
同作为JavaScript MVC框架,Backbone和AngularJS各有什么优缺点
1、框架的成熟度:
Backbone相对成熟稳定,AngularJS有时会出bug,而且AngularJS的下一个版本不兼容以前的版本;(但Angular的思想是比Backbone要先进的——个人认为)
2、使用灵活度:
Backbone超级灵活,AngularJS则只能使用单一的解决方案;但Backbone过于灵活,所有需要自己写的东西就会很多。
3、框架本身大小:
Backbone本身要比AngularJS小很多尤其是压缩以后,但Backbone依赖于其他框架,所以在这方面,两者就相差不多了。
4、使用框架所带来的代码量:
但Backbone过于灵活,所有需要自己写的东西就会很多。导致开发简单功能时会多出N多代码,当然项目越大越复杂使用Backbone就越理想。
5、学习成本:
Backbone入门成本比较高,但越往后越轻松,AngularJS入门成本比较低,但越往后越难理解,你需要放弃传统的开发思想,深刻理解AngularJS思想才行。
6、与其他框架的兼容:
Backbone是可以兼容jQuery的,并且有众多的第三方扩展插件,你几乎可以在网上找到所有你想要的解决方案,但这也意味着你得额外学习第三方的插件。AngularJS只能用Angular的解决方案,就是所谓的Angular only。
注:其实框架没有谁比谁好,只能看哪个更合适,或者哪个是你目前项目正在用的。作为合格的前端,最好是这两个都会。
能说说 Grails 和 Spring MVC 各有什么优缺点吗
1:
spring3开发效率高于struts
2:
spring3 mvc可以认为已经100%零配置
3:
struts2是类级别的拦截, 一个类对应一个request上下文,
springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应
所以说从架构本身上 spring3 mvc就容易实现restful url
而struts2的架构实现起来要费劲
因为struts2 action的一个方法可以对应一个url
而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了
4:
spring3mvc的方法之间基本上独立的,独享request response数据
请求数据通过参数获取,处理结果通过ModelMap交回给框架
方法之间不共享变量
而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的
这不会影响程序运行,却给我们编码 读程序时带来麻烦
5:
由于Struts2需要针对每个Request进行封装,把Request,Session等Servlet生命周期的变量封装成一个一个Map,
供给每个Action使用,并保证线程安全。所以在原则上,是比较耗费内存的
.net web开发有WEBFORM,MVC,EF等来开发,各有什么优点和缺点?
net web主要的优点就是速度快,因为.net web使用的语言是C#,C#做的程序就是事件+控件,你比如使用EXTJS这个JS框架,C#只需要使用控件就可以搞定,MVC、EF这些如果使用EXTJS框架,只能自己手写代码,MVC、EF开发网站的周期较.net web长
C#里面使用ADO.NET连接数据库又不像MVC(JavaEE),不同的数据库操作引入不同的命名空间(Java里面叫导入包),这个比Java方便得多,因为Java使用数据库,必须找到对应版本数据库的jar包才可以,否则无法操作数据库,C#直接引入对应的命名空间,比如使用微软的MSSQL数据库,C#只需要导入System.Data, System.Data.SqlClient这两个命名空间即可调用对应的数据库操作类,但是Java不一样,比如SQL2000和SQL2005使用的jar包是不一样的,但是这C#使用这两个数据库直接导入System.Data, System.Data.SqlClient就可以了
C#使用AJAX也只需要使用一个控件,而MVC、EF肯定要手写
C#唯一的缺点是不能跨平台,也就是你开发的web网页,只能部署在Windows里面的IIS(Internet Informatica Server)服务器上
MVC、EF可以跨平台,也就是就算你使用Linux都可以将网页部署上去