Web学习笔记 (1)MVC框架小结

本文深入探讨了MVC(Model-View-Controller)设计模式,解释了其在软件开发中的应用,尤其是如何促进代码的可扩展性、复用性和维护性。文章详细阐述了视图(View)、模型(Model)和控制器(Controller)三者的职责,以及它们如何通过组合模式、观察者模式和策略模式协同工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        MVC即Model(模型)、View(视图)、Controller(控制器)。

        它是一个设计模式,强制性的将应用程序的输入、处理和输出分开,是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已被广泛使用。最近几年被推荐为Sun公司J2EE平台的设计模式(接下来有可能会总结学习)。

        很多程序员倾向于将软件的业务逻辑放在Controller里,将数据库访问操作的代码放在Model里。所以一般来说其代码结构,是“View层是界面,Controller层是业务逻辑,Model层是数据库访问”,这个对不对呢?(可直接请看最底内容。)

         MVC要实现的目标是将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强。

                                             

 

(1)视图 

         View层是用户看到并与之 交互的界面(它可以包括一些可以显示数据信息的页面,或者展示形式。例如jsp,html,asp,php)。 

        对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,也包括一些新的技术,如:Macromedia Flash和XHTML,XML/XSL,WML等一些标识语言和Web services. 

        MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。 

 

(2)模型

        Model层表示 业务逻辑(可以说就是后端接口,用于业务处理)。在MVC的三个部件中,模型拥有最多的处理任务。模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。 

 

(3)控制器

        Controller层用来 调度 View层 和 Model层,将用户界面和业务逻辑合理的组织在一起,起粘合剂的效果。所以Controller中的内容能少则少,这样才能提供最大的灵活性。

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

         控制器的作用就是这么简单, 用来将不同的View和不同的Model组织在一起,顺便替双方传递消息,仅此而已。

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

       少用继承,多有组合

        在实际创建中,各Model之间是可以相互调用的, Controller也可以无障碍的调用Model。

        而Controller之间是不可以相互调用的,要复用代码只能将代码提升至父类,通过继承实现,显然这种做法既不正确,也不灵活,因此完全不提倡。

         所以:编写代码要相对“薄Controller,厚Model”。而 View和Controller的关系是一对多。


另一个角度深刻剖析MVC       

       知其然,并且也知其所以然。

       MVC是一种模式,但却在GoF总结出来的这个23个设计模式之外,确切的说它不是多种设计模式的组合,并不仅仅只是一个单独的一个模式。 

       组成MVC的三个模式分别是组合模式策咯模式观察者模式。 

       注意,以下内容以这三个设计模式的知识为基础,如果对这三个设计模式没概念,或许会阅读困难。

       (1)组合模式 

       组合模式只在视图层活动, 视图层的实现用的就是组合模式,当然,这里指的实现是底层的实现,是由编程框架厂商做的事情,用不着普通程序员插手。

        组合模式的类层次结构是树状的, 而我们做Web时视图层是html页面,html的结构正是树状,这其实就是一个组合模式的应用。

        组合模式就是从界面设计的通用解决方案总提炼出来的,只要涉及到用户界面,组合模式就必定存。

       (2)观察者模式

       观察者模式有两部分组成,“被观察的对象” 和 “观察者”,观察者也被称为监听者。

        对应到MVC中,Model是被观察的对象,View是观察者,Model层一旦发生变化,View层即被通知更新。View层和Model层互相之间是持有引用的。 我们在开发Web MVC程序时,因为视图层的html和Model层的业务逻辑之间隔了一个http,所以不能显示的进行关联,但是他们观察者和收听者的关系却没有改变。

       当View通过http提交数据给服务器,服务器上的Model接受到数据执行某些操作,再通过http响应将结果回送给View,View(浏览器)接受到数据更新界面,这正是一个接受到通知并执行更新的行为,是观察者模式的另一种表现形式。

       (3)策略模式

       策略模式是View和Controller之间的关系,Controller是View的一个策略,Controller对于View是可替换的, 在实际的开发场景中,也经常会碰到一个View被多个Controller引用,这即使策咯模式的一种体现。

总结一下,关于MVC各层之间关系所对应的设计模式:

        View层,单独实现了组合模式;

        Model层和View层,实现了观察者模式;

        View层和Controller层,实现了策咯模式。

        MVC就是将这三个设计模式在一起用了。

       所以针对业务逻辑应该放在Controller还是Model的问题,从设计模式的角度讲,策略模式中的策略通常都很小很薄,不会包含太多的内容, Controller是一个策略, 自然不应该在里面放置过多的内容,否则要替换一个新的会相当麻烦,与此同时也会破坏View-Model的观察者模式,仿佛View-Controller之间即实现了策略模式又实现了观察者模式,这种混乱是罪恶的根源,是制造焦油坑让程序员陷入其中无法自拔的罪魁祸首。切忌,应当避免。
 

参考来源:

https://blog.youkuaiyun.com/zuiyingong6567/article/details/80150834

作者:https://me.youkuaiyun.com/zuiyingong6567

https://www.cnblogs.com/wchxj/p/8012215.html

作者:http://home.cnblogs.com/u/wchxj/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值