浅析MVC模式在WEB开发中的应用.doc_第1页
浅析MVC模式在WEB开发中的应用.doc_第2页
浅析MVC模式在WEB开发中的应用.doc_第3页
浅析MVC模式在WEB开发中的应用.doc_第4页
浅析MVC模式在WEB开发中的应用.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

山东科技大学学士学位论文摘 要随着Web的发展和功能的需要,动态网页的开发变得越来越复杂,工程也变得越来越庞大,原有的嵌套和面向过程的开发已经无法应付。MVC就是一个专门针对解决大型Web项目的开发模式。 PHP作为一种简单易用的开发语言,它的第五版对Object Oriented思想加入了完全的支持,使用MVC模式,PHP就能完成复杂的Web应用的开发。是否采用MVC,如何使用MVC,一个最根本的原则是不要为了使用而使用。本文首先介绍了PHP语言的特点和开发流程的发展,然后简明扼要的阐述了MVC思想,最后以制作个人的Blog为例说明如何利用MVC思想进行PHP开发,并对其中的一些技术细节和难点做出了说明。关键词:MVC,PHP,设计模式,BlogThe Discussion on MVC Pattern in Web Application Programming Abstract: With the Web application growing more complex and huge, the original developing way cannot meet the requirements. MVC is a solution to large Web project. PHP5 fully supports Object Oriented programming, and made it available to use MVC pattern in PHP programming. Is it necessary to use MVC or How to use MVC, a principle to decide this is not to use it just for use. This article can be divided into three parts; the first part will introduce the feature of PHP and its development in programming. And then states the essential of MVC pattern. At last, I will explain how to use MVC by making a Blog and make an explanation to some technical details.Keywords:MVC,PHP,Design pattern,Blog23目 录1引 言12 PHP介绍与Web开发流程的发展221 PHP语言概述222 传统的PHP嵌入式开发223 简单的解析模板的应用324 Smarty模板技术43 MVC思想731 简介732 MVC设计思路733 MVC在PHP中的实现934 三层开发体系结构与MVC的比较1235 常见的MVC模式实践1336 MVC开发流程1437 在实际开发过程中的感想154 用PHP和MVC思想开发一个Blog的实践1741 功能的确定1742 数据表的设计1743 程序结构195结束语221引 言随着Web2.0的兴起,Web应用在Internet中也愈显得重要。Flash技术不断发展,以及JavaScript等各种老技术的新应用,逐渐弥补着Web应用与桌面应用相比交互上的不足。但由于Web本身和相关一些技术的原因,例如Http的瞬时性和无状态性,与传统的桌面编程有着很大的差别,所以在开发过程中也面临着许多新问题,比如仅仅是HTML与代码的分离就有很多讨论与解决方案。同时各种设计模式也在Web开发中得到了新的应用。其中Object Oriented思想和MVC设计模式无疑是最经典也是最常用的,它们极大地增加了代码的重要性,缩短了开发周期,特别是在中型和大型项目上,优势更加明显。PHP作为一种开源的脚本语言,它的易用性使其成为快速开发Web项目的首选。与此同时,PHP5.0对面向对象的支持更加完善,增强了其在企业级别的应用,使Object Oriented思想和MVC设计模式更有效地得到发挥。本文后半部分就以PHP语言开发一个单用户Blog来简要的阐述一下MVC思想和开发的具体过程。2 PHP介绍与Web开发流程的发展21 PHP语言概述PHP是Hypertext Preprocessor的简称,是一种HTML内嵌式编程语言。它的语法混合了C、Java和Perl优点及它的新语法,比CGI、ASP或者Perl更快速地执行动态网页。总的来说,它有以下几个方面的优点:(1)支持的数据库非常广泛,大到SYBASE、MySQL、ORACLE,小到Access都支持。(2)跨平台性非常好,支持Windows系列操作系统,LINUX操作系统和UNIX操作系统。同时支持多种Web服务器。(3)开源软件,升级更新速度非常快。(4)免费软件,无须花钱购买。同时与Linux、Apache、MySQL构成性价比最高的Web系统。(5)PHP5.0有成熟的面向对象体系,能够适应基本的面向对象要求,适合开发大型项目。22 传统的PHP嵌入式开发最早的PHP语言是纯粹的过程化的,通过界定符与HTML区别并与HTML嵌套,实现动态的数据处理。一个典型的代码例子如下:My PageHello, , Welcome to my site!其中,是PHP的界定符,它们之间的代码即为PHP代码,可以动态的返回需要的数据。同时也可以与数据库连接实现数据库的操作。在Internet早期一个HTML文件的体积并不是很大,业务逻辑也相对简单,这种情况下,echo一行行的HTML代码还相当容易。但随着网络的提速,HTML文件的体积暴增,业务逻辑也越来越复杂。这时逻辑代码与表现代码的嵌套在实际中就显得相当困难。比如仅仅是一些下拉选择框初始值的确定,就需要大量代码来实现。此时,数据层、逻辑层、表现层的概念还没有一个界定和区别,完全是混合在一起的。随着对程序代码与HTML分离的迫切要求,“模板”技术应运产生。23 简单的解析模板的应用“模板”技术实际上是结合了HTML和脚本语言特征的一种表达方式,逻辑层和表现层依靠它联系。它基本上单纯的实现了PHP代码与HTML代码的分离,使得美工和程序员之间的矛盾得到了极大的缓解。大约在98年PHP3的时代,Fast Template的诞生使其成为此类模板技术的典型代表。代码例子如下:模板文件: titlegreetingsPHP代码:Parse(array(“title”=”Hello”,”greetings”=”Welcome to my site!”);/对模板变量赋值?上述例子模板文件中的titlegreetings看作是一个标记,可以被替换成不同的值。PHP代码中,通过Fast template对titlegreetings动态赋值,这些标记分别被”Hello”和“Welcome to my site!”替换,从而实现了程序代码与HTML代码的分离。与此类似的一些模板技术原理都是将模板读入内存,然后调用parse()函数,用数据对预置的标记进行替换。此时应用程序的逻辑层和表现层虽然能够被清晰的界定,但表现层仅仅是一个标记的匹配和替换,大量的页面上的布局和判断仍然需要在PHP中处理和确定,所以程序员还需要处理一些显示上的问题。可以说这是一种不彻底的分离。24 Smarty模板技术Smarty的出现和其独特的思想可以说是让业界为之一震,它的模板编程和“编译”的概念带来了一场革命。 Smarty将逻辑判断和循环,赋值,config配置文件等引入到模板中,可以说Smarty就是一个小小的解析器。这样的好处就是我们可以用一个更为通用的模板来实现表现层,不用将显示上的逻辑判断送到PHP的逻辑层中进行,也不用为了实现代码的分离而因一个小小的显示上的改变重新建一个模板。程序员所做的仅仅是提取、组织、处理好需要的数据,然后通过Smarty Assign到模板,这些数据怎样显示,显示多少,完全交由显示逻辑处理。这样,程序代码和HTML代码就可以更彻底的分离,不仅简化了工作复杂度,也更有利于分工协作。Smarty的另一个特性就是“编译”。接到request后,先判断是否是第一次请求该URL,如果是,将该URL所需模板文件“编译”成脚本,然后redirect;如果不是,则表示该模板已经编译过,可以马上redirect。这样除了第一次编译成本比较高之外,其他的访问省去了大量的parse()时间。Smarty还具有cache技术,对页面生成静态缓存,可以适应更为严格的运行要求1。Smarty模板引擎工作原理图如下(图1)所示:图1:Smarty工作原理图另外,国外对Smarty这样一个Engine级别的系统也存在着很多讨论,有的认为作为一个模板,它提供的功能过于繁杂,PHP本身就是一种“模板”语言,在这样的解释性语言上再用另外一套标记嵌套一层解释性语言,简直是多余;另一种看法是PHP作为一种优秀的脚本语言,Smarty是一种更好的彻底分离逻辑层和表现层的思想,虽然它的“编译”同样可以归结为PHP语言的应用,却可以提供更方便的使用方法,何乐而不为10。作者更倾向于后一种观点,清晰的逻辑思路比起系统的一点开销,显然思路更为重要!3 MVC思想31 简介MVC是“Model-View-Controller”的缩写,即“模型-视图-控制器”。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Model的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了View,View都会从潜在的Model中获取数据来刷新自己。MVC模式最早是Smalltalk语言研究团提出的,应用于交互应用程序中。MVC模式是一种架构模式,其实需要其他模式协作完成2。MVC模式是一个复杂的机构模式,其实现也显得非常复杂。但是,目前已经总结出了很多可靠的模式,多种设计模式结合在一起,使MVC模式的实现变得相当简单易行。View可以看作一棵树,显然可以用Composite设计模式来实现。Views和Models之间的关系可以用Observer模式体现。Controller控制View的显示,可以用Strategy实际模式实现。Model通常是一个调停者,可采用Mediator设计模式来实现3。32 MVC设计思路MVC英文即Model-View Controller,即把一个应用的输入、处理、输出流程按照Model,View ,Controller的方式进行分离,这样一个应用层被分为三个层模型层,视图层、控制层。视图(View)代表用户交互界面,对于Web来说,可以概括为HTML界面,但也有可能为XHTML、XML、Applet和Flash等。随着应用的复杂性和规模性的提高,界面的处理也变得具有挑战性,一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给Controller和Model。模型(Model)就是业务流程和状态的处理以及业务规则的制定。业务流程的处理过程对其他层来说暗箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型作了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉你按照模型设计就可以利用某些技术组件,从而减轻了技术上的困难。对一个开者来说,就可以专注于业务模型的设计。MVC设计模型告诉我们,把应用的模型按照一定的规划抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的设计依据。抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。可以用Object Oriented编程来作比喻,MVC定义了一个顶级类,告诉它的子类只能做这些,但没法限制你能做这些,这点对实际应用很重要。业务模型还有一个很重要的模型那就是数据模型。数据模型主要是指实体对象的数据保存。比如将一张订单保存到数据库中,从数据库获取订单。我们可以将这个模型单独列出,所有有关的数据库的操作只限在该模型中。控制(Controller)可以理解为从用户接受请求,将模型与视图匹配在一起,共同完成用户的请求,划分控制层的作用很明显,它清楚地告诉开发者,它仅是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层不作任何的数据处理。例如,用户点击一个链接,控制层接受请求后,并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,把符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型。总之,模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其他依赖于这些数据的视图都反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化传播机制。模型、视图、控制器三者之间的关系和各自的主要功能,如下图(图2)所示:图2:模型、视图、控制器关系图33 MVC在PHP中的实现A与Java中都提供了一个很好的实现这种经典设计模式的类似环境。目前,PHP中有许多MVC模式的框架,比如著名的phrame、phpmvc、mojavi。它们所提供的是一种半成品,只要按思路走下流程就是一个MVC实现。现实中有很多东西需要定制,并且对于小型和某些中型项目来说,运用这样一个MVC框架,所带来的益处比开销要小得多。但是MVC的思想应用是比较通用的。(1)视图视图是模型的表示,它提供用户交互界面。使用多个包含单显示页面的用户部件,复杂的Web页面可以展示来自多个数据源的内容,并且网页设计人员、美工都能独自参与这些Web页面的开发和维护。PHP中有两种实现View的方法,一个是Template View,另一个就是Transform View。a. Template View:用于Web 应用的View中使用的主要模式就是Template View,这个模式使用一个模版文件(通常是html),它包括了一些特殊标记,当Template View被执行时,这些特殊标记就被model里的对应数据替换并显示出来。 PHP 本身就是一种特定类型的实例模版,叫做服务器页。有一些复杂模版引擎甚至是Plain Old PHP Pages(popp)的模板不容易变换和替换,而且嵌入了控制结构和其他逻辑到页面里。虽然这样做在移植性上有些欠缺,但是对于分离的思想还是有帮助的4。在PHP中用Smarty实现Template View是比较好的方法,它所使用的模板文件是一种HTML和特定标识符的混合。这些标识符不仅仅是变量的替换,而且还可以表示一些简单的逻辑应用。有人曾经怀疑Smarty作MVC视图的适用性,因为MVC强调严格的表现层与逻辑层的分离。而Smarty在模板中加入逻辑应用仅仅是显示上逻辑判断,与业务逻辑没有任何关系。这样一来,不仅彻底地实现了程序代码与HTML代码的分离,而且更加符合MVC“分离”的思想。需要注意的是,Smarty所谓的“编译”实际上是把数据和HTML组合成最原始的嵌套模式,即仅是echo语句与HTML的组合,以提高效率。b. Transform View:Transform View从Model中提取数据,然后把数据转换成需要输出的格式。它实际上是使用一种语言逐个遍历数据元素,然后集中输出。Template View与Transform View之间的差异就是数据流的方向。在Template View中先有一个输出的框架然后向里面插入数据。Transform View中则从数据着手,从它之中建立输出。实施Transform View的主要技术是xslt5。(2)控制器为了能够控制和协调每个用户跨越多个请求的处理,控制机制应该以集中的方式进行管理。因此为了达到集中管理的目的引入了控制器。应用程序的控制器集中从客户端接受请求(典型情况下是一个运行浏览器的用户),决定执行什么商业逻辑功能,然后将产生下一步用户界面的责任委派给一个适当的视图组件。用户控制器提供一个控制和处理请求的集中入口点,它负责接受,截获并处理用户请求;并将请求委托给分发者类,根据当前状态和业务操作的结果决定向客户呈现的视图。按照传统做法,我们需要在Controller里使用请求捕获者类和分发者类。请求捕获者类捕获HTTP请求转发给控制器。但在实际应用中,特别是小型应用中,只要实现其思想即可,例如,PHP中的系统变量$_REQUEST, $_POST, $_GET,$_FILES就包含了所有的可能的用户请求,安全方面可以对其进行过滤(filter)和判断,实现请求捕获者类的功能。至于分发类者,则主要有两种实现方式:a. SwitchCase:此种方法使用一系列的常量作为判断依据,实现Action与Model的对应关系,但缺陷是有可能使得Controller过于庞大。b. Action Map:这是一个比较常用的方法,通过对数组键与值的判断,使用一个相同的命令模式调用不同的Model。总之,MVC并没有严格的定义,它的思想有很多实现方法,灵活应用是使用MVC的一个原则。(3)模型MVC系统中的模型从概念可以分为两类系统的内部状态和改变状态的动作。模型提供了业务实体和业务处理,即实时把“做什么”和“如何做”分离,目的就是尽可能的实现代码重用。模型是MVC的关键,在设计模型时需要对业务流程和数据对象有着充分的理解,在此基础上尽可能的抽象出全部模型的搭配。模型与模型之间应是互异的,不仅在业务逻辑上,在数据对象上也应如此。另外还要对某些暂时未实现的功能留有接口,易于升级和维护。PHP中模型的实现可以用函数也可归为类,自由度很高。数据模型的关键是与数据库的接口,接口要尽可能的做到统一。目前常用的就是ADODB和PDO,这两种仅仅是做到了数据库应用与数据库种类的无关性;在Zend最近推出的Zend Framework中,其Zend DB控件对数据库又进行了上一层的封装,有的时候只要设置几个参数即可,用户完全可以不用参与到具体SQL语句的编写上。34 三层开发体系结构与MVC的比较传统的三层开发体系结构将所有业务分为三层,即表现层、逻辑层和数据层。这样的开发结构同样实现了程序代码与HTML的分离,表现层与逻辑层的分离。分离是好的,但传统三层体系结构往往忽视了三者之间的内在联系,它们之间如何协调也并不清楚,而且逻辑层如何具体实现业务以及与业务对象之间的关系也并未表明。MVC在一定程度上弥补了三层开发体系结构的不足。MVC具有多视图对应一个模型的能力,对多种不同方式的访问请求可以用一个模型来实现,减少了代码的重复和维护量,一旦模型改变也易于维护。其次由于模型返回的数据不带任何显示格式,因而这些模型也可直接应用于接口的使用。再次,由于一个应用被分离为三层,因此有时改变其中的一层就能满足应用的改变。一个应用的业务流程或者业务规划的改变只须改动MVC的模型层。控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起完成不同的请求,因此控制层可以说包含了用户请求权限的概念。但是MVC也存在着一些缺点,例如代码数量的增加,其次是MVC并没有一个严格的定义,实现方式上百家争鸣,有一定的混淆,而且实现成本上也高很多。但这是相对的,一般而言,项目越大,MVC的优势越明显。35 常见的MVC模式实践(1)MV形式简单的说这种方法是以屏幕为组织单位的,因而与RAD工具的开发思路类似。一个屏幕及其控制被抽象成一个类,这个类有一个私有的Model对象来代表屏幕上要用到的数据元素。屏幕对象并不保存任何的实体数据,这些数据被组织在了Model对象中。控制器的作用也不明晰,它的大部分功能被View取代或是Model取代。Model组织起屏幕的数据,View向Model索要其希望显示的数据。这一操作通过预先协商的接口访问,而不是直接操作。如果出现复杂的业务逻辑(用户选择的某种操作),有人将其放在Model端,也有人放在View端,但一般放在Model端,这时Model带有严重的Controller的色彩。这种模式鼓励从屏幕开始思考,从而容易忽视业务的流程6。(2)Smart Ticket中使用的模式这一模式的特点是Controller变成了一个巨大的事物处理器,所有由UI收集到的用户需求都转发给Controller处理。Controller内部保存了一组常量。在一个Dispose形式的方法里一个巨大的SwitchCase语句根据比较不同的常量,处理不同的请求。这种技术有时也将Controller成为处理器,或者屏幕导航器7。(3)iFeedback中简化的MVC为了大大减少类的数量,iFeedback的作者将MVC封装到一个类中,用不同的方法来代表对这三者的分离。此方法不用担心MVC三者之间的操作关系8。总之,这些模式实践都是针对实际问题中侧重点不同而产生的差异现象,MVC本身没有严格的界定,应当根据需要来细化方案,更好的提高应用效率。36 MVC开发流程在着手开发一个Web项目时,数据库的设计通常是第一位要做的,基本上所有的操作都会涉及到数据表的操作。那么数据表的设计就关系到整个项目的设计和功能的实现。如果数据表尚未给出或者需要根据项目的目标来设计的话,那么首先要做的就是功能分析。说到功能,与之联系最为紧密地就是用户界面,作为人机交互的桥梁,它的重要性不言而喻。用户在使用程序时只关心怎么完成要做的事情以及程序的易用性,对具体如何实现并不关心。所以设计用户界面的一个重要原则就是隐藏所有与用户无关的,以最简捷的方式提供给用户最需要的东西。UI和MVC中的View在实体上是等同的,却完全是两种不同意义上的概念,一个对于用户来说,一个对于开发人员来说,因此,UI的设计还需要考虑对开发的影响。基本的原则就是尽可能的使一次操作所涉及的数据表更少,功能尽可能的集中并且独立,以更好利用模型的重用性。基于这种理念,MVC的设计应该是这样一种顺序,Functions-UI-View-DB Table Structure-Business Logic(Model),即首先确定功能,根据功能合理的确定用户界面进而为MVC中View划下一个合理的轮廓。然后再根据功能的集合划分来设计数据表。在MVC中,View和数据表应该是整个规划过程的两个端点,View是最形象最贴近用户的,数据表是最抽象最底层的。所以,一旦两个端点确定,中间就是确定如何从起点到终点的过程,即逻辑模型的实现。这就好比在一个范围内,有目标的去工作,不会超轨,也不会偏离最终目标,是一个比较好的设计方法。同时,对于View和数据表的规划就有了更高的要求,可以在着手开发项目之前,反复对View和数据表进行调节平衡,目的是减少开发的复杂性。对模型的开发,基本上使用Object Oriented思想,找到相关的对象,以适当的粒度将他们归类,再定义类的接口和层次,建立对象之间的基本关系。所以模型设计应当有针对性,同时对将来的问题和需求也要有足够的通用性。要一下子就得到复用性和灵活性好的设计,是非常困难的。所以这是一个反复修改和调试的过程。37 在实际开发过程中的感想是否采用MVC:MVC是个思想,具体实现方法从简单到复杂有很多,如果是一个人工作,且工程不是很大,那么使用MVC不会有很大的益处。在多人协作的时候,MVC的好处就显现出来,特别是在使用一些基于MVC思想的框架时,常用组件的封装,统一的开发流程,清晰的分工界定,这些所带来的好处简直是用语言难以形容。如果工程很大,这个优势则更加明显。采用什么样的MVC:上文中也叙述到了MVC常见的实践模式,在实际中这些将更加灵活多样难以确定。而实践模式的确定,主要就是Model View Controller三者之间如何协调的确定。例如,可以用SwitchCase作为分发器,调用不同的函数来实现精简的MVC;也可以用一个Action Map数组将用户的Action转化为Model的选择,进而进行处理。至于视图,可以在每个Model里直接进行内容的确定和进行HTML渲染,也可以是只由Model确定内容,然后统一渲染。这些在应用中都没什么差别,只是功能的划分不同,体现了一种思路或者思想上的差异。数据模型的设计:Web开发归根结底就是与数据库打交道,对数据库操作的封装主要有两种。一种是在涉及的数据表比较单一,即每次操作主要针对一个数据表时,这时可以设计一个通用的类,只更换数据表即可完成对数据库的操作;另一种情况是在涉及多个表的操作时,例如联表查询等,可以对每种具体的操作进行封装,而不是针对SQL语句。总之,对数据操作的封装是最基本的,在设计时应当充分考虑到未来的需要和可扩展性,如果在开发业务逻辑模型期间再对数据操作的封装进行修改,往往可能会伤筋动骨,牵连的内容会较多。贯穿MVC的相关问题:似乎有很多“什么到哪里”的问题围绕着MVC,这方面有很多争议,不同的观念就有不同的实现方法。首先,对Session的划分,一个争议是说Session为不变的数据存储,通常是以文件形式保存在服务器上,因此最好归入Model的范畴;另一种说法就是Session和其他的PHP 超级全局变量一样,Session数据是输入系统的,因此是属于Controller;另外一些开发人员认为,Session是用Cookie执行的,一种工作在HTTP上的HTML里的技术,所以是和View相关联的。其次身份认证的归属,它似乎是应用逻辑的一部分,因此是属于Model。但是如果要限制只有通过验证的用户才能执行特定动作(Controller的部分),那么Controller可以进入Model,所以身份认证归入这里似乎是个完美的划分。但是Http认证呢?如果把它也归入Controller,在整个概念中浏览器适合在哪里?很明显是View。如若要通过Java语言进行验证,验证属于Controller和Model还是其它就很难界定了11。4 用PHP和MVC思想开发一个Blog的实践41 功能的确定一个Blog最基本的功能就是Blog文章的添加、修改、删除,此外还有评论的相关操作。Blog和评论属于文档性质,在数据表的设计上有一定的相似性。另外,还要有文章的分类管理,以及标签(tag),在访问统计上,也要记录访客的IP、Browser Agent等,以便于掌握站点访问信息,总起来说,要实现的功能如下:Blog添加,修改,删除,分类,Tag,Trackback, TB Ping评论添加,修改,删除,审核分类添加,删除,修改(暂时只实现一级分类,考虑到加入Tag功能,多级分类就显得多余)Tag的管理添加,删除首页公告 修改42 数据表的设计在这些功能当中,前四个是最主要的功能,这四个组成了一个完整的Blog功能实现。这样,一个功能对应一个数据表。那么数据表的设计如下:(1)Documents表 :字段名类型说明d_idinteger primry keyBlog文章IDd_titlevarchar(64)标题d_contenttext内容d_timeint时间(以时间戳的形式)d_to_pingtext草稿中未Ping的URId_pingedtext已经Ping的URId_categoryint foreign key分类IDd_tagsvarchar标签d_statustiny int状态(已发表,草稿,隐藏)d_is_lockedtiny int是否锁定(不能评论或Ping)d_passwordvarchar(32)密码d_tb_countintTrackback计数器d_View_countint浏览计数器d_commnet_countint评论计数器(2)Comments表:字段名类型说明c_idinteger primary key评论IDc_p_idint foreign key评论父IDc_timeint时间c_authorvarchar作者c_emailvarcharEmailc_urlvarcharUrlc_contenttext评论内容c_statustiny int状态(正常,待审核)c_typetiny int类型(文本,Trackback)c_ipintIP(数值型)(3)Category表:字段名类型说明cat_idinteger primary key分类IDcat_namevarchar分类名称cat_descriptiontext分类评论(4)Tags表字段名类型说明t_namevarchar primary keyTag名称t_docstext包含此Tag的文章ID (字符串形式存储)以上是最主要的四个表的结构,其它表的结构暂略。这四个表对应着功能中的前四个。这里体现着这么一个思想:先将功能分成类似的集合,然后再以集合划分数据表,结构清晰,便于模型的组织和设计。实际上,数据表的设计体现着功能,关键是要使数据表合理。例如,Documents表中的d_tags与tags表中的t_docs就是一个匹配关系,这里并没有在tags中加入t_id,而是直接在tags表中以tag_name作主键,一个是考虑到一个文章中tag的数量不会太多,另一个考虑到tag与文章的匹配关系的实现,这样系统花销不至于太大,而且实现也很方便。43 程序结构上文中已经提到MVC常见的模式实践,可见MVC的实现方法很多。考虑到上述三种模式的优缺点和实际应用的需要,采用如下组织方式:视图采用Smarty,仅仅是表现层,不做任何处理。将Controller和业务逻辑

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论