作者的blog:http://blog.csdn.net/oyiboy
习惯于过程式的开发,一直向往着面向对象。无奈半路出家人,没有一点内力基础,看了一大堆面向对象的书也只是看得一头雾水。对于mvc的概念也是偶然了解到的,感觉能和web开发结合起来让项目面向对象化。以下是我一点点心得。
先介绍一下mvc的概念:
mvc(model-view-controller),即把一个应用的输入、输出、处理流程按照model、view、controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。
模型(model):就是业务流程/状态的处理以及业务规则的制定。即是mvc的主要核心。
视图(view):代表用户交互界面,也就是web的html界面。
控制(controller):可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。
以下以一个简单的留言板作为分析例子。
1)从上面的概念来看,留言板可以切成三部份。
模型(m):包含 数据库链接、生成数据集、数据库更新操作。
视图(v):包含 获取模型的数据集,将数据集内填充到各种显示界面内,如(留言板列表,管理控制页面,添加修改删除界面等一切用户看得到的页面。)
控制(c):包含 数据库更新的数据校验,将更新完毕后的结果转交给视图进行呈现。
2)三部份已经出来,下面是更进一步的细化。
模型(m)
数据链接:数据链接参数、链接失败处理。
数据操作:生成固定格式的数据集、运行单行sql、解析固定格式的数据集更新数据库(内容包括有:留言记录,管理员帐号,系统设定)。
文件操作:将文件内部格式封成数据集,并附带读取写入文件操作。(内容包括有:留言板样式设定、版权设定、搜索引擎关键字设定、留言板标题设定)
视图(v)
数据显示:根据要求授权给控制器[c]向模型[m]请求数据集,然后根据数据集显示出界面。
操作结果显示:根据控制返回的数据资料决定显示的提示资料
具体资料包括有:
留言添加页:判断留言者是否管理员、判断本次留言是回复还是新建留言。
留言管理页:批量删除留言、查询留言、管理员帐号管理、系统设定等。
留言显示页:判断留言是否为管理员专用、判断本留言是否为管理员发布、是否允许回复、是否显示留言者的敏感资料、留言是否需要审核后再显示。
控制(c)
数据/文件操作:接收操作资料,校验数据是否符合条件,引用模型的生成数据集类生成指定数据集,然后交给相应的模型操作方法操作,并获取操作结果以预定好的格式转交给视图处理
3)系统基本上细化完毕,下一步就是将以上分析出来的东西封装成class
模型(m):
数据库链接和数据操作可以封成一个class。
数据库数据集的结构,可以引用dictionary控件与数组完成。其间操作也可以封成一个class具体可以仿造asp.net中dataset对象的部份机构。
文件操作部份封装成一个class
文件结构定义可以封成一个class以方便控制直接引用,然后转交给文件操作class进行相应的操作。
视图(v):
视图部可均是以文件模式出现,也可以将部份代码封装后引用。也可以引用现有的模板类实现代码分离等。
控制(c):
数据校验:sql注入防御处理、日文字符替换处理、特定常用校验正则式,这个是控制器常用的函数,可以封成class也可以以函数型式存在独立文件,使用时直接引用。
数据/文件更新操作:由于直接操作,可以避免使用class,而是以文件模式出现,每个文件处理模型(m)中的某个类。并完成控制(c)的工作。
视图[v]模型[c]链接器:接收视图[v]要求数据集的请求,将请求转换成模型[m]合适的sql句,然后交给模型[m]数据集成生器生成数据集,然后返回给视图[v],这个处理比较麻烦,如果没必要作得太严谨的话可以直接使用字段名,并在视图[v]以sql标准的条件句进向模型[m]请求数据。
疑:
视图[v]模型[c]链接器,对这个的设定我还是有点迟疑的。因为在mvc中,v对m的请求中是不需要c的掺和的,但是,这个链接器的操作确实很符合c的概念,所以这里我把它放在了控制器[c]里。或许他可以放至在视图[v]内。毕竟这个是视图[v]的事。这个就看每个人对mvc的理解了。
以上基本完成了留言板的结构分析与类的抽象,有不少的地方比较繁琐,甚至是啰嗦,一个留言板其实是没必要这样,不过,这个例子里作出来的不少class可以直接使用在其它更大的项目中去,比如控制器[c]中的数据集请求转换器,校验部份、模型[m]中的数据库链接等,之所以遵循mvc模型进行编程不但是为了让程序设计更灵活,最重要一点是可以很快将项目拆开成一小块一小块,然后又将这些小块再折成更小的块,一直折到单个类的某个方法某个属性,等你完成这些小块代码后,那系统也就完成了。
经典讨论贴:
http://www.blueidea.com/bbs/newsdetail.asp?lp=1&id=2450921
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器