最近在为公司设计产品框架和开发模式,发现了这篇文章,他的设计思路和我的设计极为相同,所以在这里调用这位先哲的文字,不再自己写了,希望大家喜欢。同时谢谢此文的原作者。
现在的一些基于Web的分布式系统如B2B电子商务系统,就适合采用MVC架构。通过分析,从高层次的角度可以将一个应用的对象分为三类:一类就是负责显示的对象,一类对象包含商业规则和数据,还有一类就是接收请求,控制商业对象去完成请求。这些应用的显示是经常需要变换的,如网页的风格、色调,还有需要显示的内容、内容的显示方式等。而商业规则和数据是相对要稳定的。因此,表示显示的对象View经常需要变化的,表示商业规则和数据的对象Model要相对稳定,而表示控制的Controller则最稳定。
通常当系统发布后,View对象是由美工,HTML/JSP设计人员或者系统管理员来负责管理的。Controller对象由应用开发人员开发实施,商业规则对象和商业数据对象则由开发人员,领域专家和数据库管理员共同完成的。显示逻辑在Web层或客户端控制,可以是Servlet 或JSP,动态地生成Html。一般来说采用JSP要比采用Servlet要好。JSP更好地将代码与Html部分分开,有利于页面设计人员和代码开发人员的分离,提高效率。同时JSP可以完成所有Servlet完成的功能,实际上JSP最终也转换成一个Servlet。与控制有关的对象存在于系统的每一个层次,协调跨层动作。包含商业规则和数据的对象存在于EJB层(以EJB为中心的模式)或Web层(以Web为中心的模式)。
(一)View在Web系统中的应用
View代表系统的显示,它完全存在于Web层,一般由JSP, Java Bean和Custom Tag组成。JSP可以动态生成网页内容,Custom Tag 更方便了使用Java Bean,而且它可以封装显示逻辑,更有利于于模块化和重用。一些设计良好的Custom Tag可以在多个JSP甚至可以在不同的系统里重复使用。Java Bean用来控制JSP和Model对象。JSP通过Java Bean 来读取Model对象中的数据,Model和Controller对象则负责对Java Bean的数据更新。一般来说,可以先要设计出所有可能出现的屏幕,即用户使用系统时可以看到的所有内容。然后根据这些内容,找出公共部分,静态部分和动态变化部分。可以考虑使用模板方法,把公用的内容单独生成JSP,需要变化的也各自生成Html或JSP, 由一个模板JSP, 把这些不同部分动态地引入(include方法)。还有一个要考虑的问题就是屏幕的选择问题,当处理完用户请求,模板被自动调用来显示,这个显示一定要知道用户关心的屏幕是有哪些部分组成。所以可以考虑把所有屏幕的定义放在一个集中的文件里,如一个java文件或文本文件。由于考虑到屏幕定义文件将来的变更可能性,最好使用文本文件如一个XML文件,这样将来更改不用重新编译。
(二)Model在Web系统中的应用
Model对象代表了商业规则和商业数据,存在于EJB层和Web层。在J2EE的规范中,系统有些数据需要存储于数据库中,如用户的账号信息(account model),公司的数据(com?鄄pany model)等,也有一些不需要记录在数据库里的,如某用户浏览的当前产品目录(catalog model),他的购物内容(shopping cart model)等。这些model数据存在于哪一层要根据它们的生命周期和范围来决定。在Web层有HttpSession和Servlet?鄄Context及Java Bean对象来存储数据,在EJB层则有EJB来存储数据和逻辑。Web层的Java Bean的model对象存储了EJB层model对象的数据的拷贝。因为EJB层有很多不同的model对象,所以Web层可以通过一个ModelManager来控制EJB层的各model对象,在ModelManger中可以封装使用后台model对象的方法。
在EJB层把所有的数据和规则都模式化为EJB也是不恰当的,如可以把存取数据库的对象模式化为DAO对象。DAO中可以封装与具体数据库的交互细节,如可以读写不同的表,多个数据库,甚至多种数据库;如定单的model对象可以是一个OrderDAO, 它可能要同时处理Order表,OrderStatus表和OrderItemLines表。
(三)Controller在Web系统中的应用
Controller对象协调Model与View,把用户请求翻译成系统识别的事件。在Web层,一般有一个MainServlet(或Main.jsp),接收所有请求,它可以调用屏幕流管理器决定下一个屏幕。一般还有一个请求处理器RequestProcessor,包含所有请求都需要做的处理逻辑,如把请求翻译成系统事件(Request?鄄ToEvent)。请求处理器通常还包含一个代理对象ClientCon?鄄trolWebImpl,它是EJB层的逻辑处理的在Web层的代理。在EJB层,有一个ClientController提供Web 层对EJB层的只读访问。还有一个StateMachine用来建立和删除EJB,处理Web层送来的事件。
Controller还有一个重要的功能就是同步View和Model的数据。在ModelManger中包含一个ModelUpdateManger,它把系统事件转换为一个Model的集合,即所有需要同步的Model,然后通知Listeners去做同步操作。
三、应用MVC的优点
MVC的优点体现在以下几个方面:
1.可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。
2.视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。
3.模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。
4.潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。
四、结语
与软件所处理问题的内在模型相比较,用户界面是需要经常发生变化的,采用MVC设计模式可以在满足对界面要求的同时,使软件的计算模型独立于界面的构成。也可以基于此模型建立大型分布式应用程序框架。本文介绍了MVC设计模式的原理、MVC设计模式三个组成构件(模型部件、视图部件和控制部件)以及实现基于MVC的应用需要完成的工作,最后对MVC的优点进行了分析。
阅读(1136) | 评论(0) | 转发(0) |