以下以一个简单的留言板作为分析例子。
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模型进行编程不但是为了让程序设计更灵活,最重要一点是可以很快将项目拆开成一小块一小块,然后又将这些小块再折成更小的块,一直折到单个类的某个方法某个属性,等你完成这些小块代码后,那系统也就完成了。
新闻热点
疑难解答