zoukankan      html  css  js  c++  java
  • SpeedPHP学习教程前奏篇——(理解MVC)(原创连载一)

    SpeedPHP学习教程共八篇文章,文章图片发觉不好弄,看原版请移步安徽php社区,http://bbs.hfphp.org,

    (本教程并非完全原创,部分内容和实例来自官方手册,感谢作者写出这么简单快捷的框架,让我们可以快速的学习

    从今天起,中科英才——安徽PHP社区将给大家出一个系列结合代码实例的关于speedphp的基础教程,来帮助大家更好的了解speedphp框架, 更好的理解MVC这种流行的开发思想。
          
          (有什么不正确的地方,欢迎大家跟帖提出你的看法,当 然,也欢迎你提出比较好的建议,方便我们及时改正~)

         在学习speedphp框架之前,我们必须要了解一些基本概念和知识。希望大家可以认真的看下去,因为这些是基础,我们需要去了解甚至理解~
         
          1.MVC与模板概念的理解
        MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程 序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

      模型-视图-控制器(MVC)是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已被广泛使用。最近几年被推荐为Sun公司J2EE平台的设计模式,并且受到越来越多的使用 ColdFusion 和 PHP 的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。

           2.MVC如何工作

          MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、 Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。
      视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为 XHTML、XML和Applet。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,MVC设计模式对于视图的处 理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。比如一个订单的视图只 接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。
      模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终 的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现 有的组件,但它不能作为应用设计模型的框架。它仅仅告诉你按这种模型设计就可以利用某些技术组件,从而减少了技术上的困难。对一个开发者来说,就可以专注 于业务模型的设计。MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的设计依据。抽象与具体不 能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。我们可以用对象编程来做比 喻,MVC定义了一个顶级类,告诉它的子类你只能做这些,但没法限制你能做这些。这点对编程的开发人员非常重要。
      业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据 保存(持续化)。比如将一张订单保存到数据库,从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库 的操作只限制在该模型中。
      控制(Controller)可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的 用户请求。控制层并不做任何的数据处理。例如,用户点击一个连接,控制层接受请求后, 并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个 模型。
      模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都应反 映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。这实际上是一种模型的变化-传播机制。模型、视图、 控制器三者之间的关系和各自的主要功能。

           3.MVC的优点和缺点:
            这个既然选择学习框架,我相信大家应该都比较了解,如果不了解的话,可以去百度或者谷歌下。任何东西都不是完美无缺的,至于他的缺 点,就不说了,大家可以自己去看吧~

    ==============================================================================      

    本文将讲述在网络系统(WEB系统)开发中,MVC(模型-视图-控 制器)架构的理念、设计以及在sp框架中的实际应用方式等。

    首先我们来看看MVC架构的示意图:
    sp-mvc-pic.jpg


    从上图我们可以将MVC简单地理解成:

       
    和访问者交互的是控制层(Controller 层),控制器(controller)是同类交互的集合,每一个交互的操作,都对应了一个动作(action)。在sp框架中,全部的控制器类都必须继承 于spController。
        对数据库进行存取的是模型层(Model层),在sp框架中,全部的模型器类都必须继承于 spModel。
        显示页面模板的是视图层(View层),在sp框架中,视图层被集成到了控制器内,所以在实际开发中,视图层所要制作的只有页面模板。



    上面简单描述了MVC架构的理解。下面讲述一下关于sp框架中的MVC理念,可能比较抽象而不好理解,但是还请耐心去阅读,毕竟在实际开发中,对MVC理 念的理解是非常必要和重要的。

    sp框架中的MVC理念,是将网络系统划分为三个关注点:交互、数据、页面模板;也就是我们设计或分析一个网络系统,就可以从这三个角度去进行:

    交互:
    表现在系统提供了哪些功能,这些功能可以划分为哪些大类,每一个大类的功能分别都有些什么操作等等。
    比如PHP论坛系统,我们可以粗略划分成板块、帖子、用户、站内信 息、后台管理等几大类的功能,然后用户的功能里面又包括了注册、登录、修改用户信息等等的多个操作。
       
       
    对应sp框架的控制层(controller层)而言,一个功能大类可以说是一个控制器类(当然,如果该类型概况的范围比较大,那么还需要继续拆分成多个 控制器类),单个类型内的每一个功能就是一个动作(action,控制器类的方法函数)。然后根据访问者对系统的每一次操作,sp框架都 会自动选择对应控制器类中的对应动作进行处理。


    数据:
    表现在系统对数据库进行了那些操作。网络系统几乎都需要和数据库打交道。那么,在进行对交互的分析和对系统本身的分析后,我们也大致上可以归纳系统需要哪 些数据了。然后我们将这些数据整理归类,最终可以得出系统需要的数据表是哪些。
    就刚才的PHP论坛,按照“板块、帖子、用户、站内信息、后台管理”这五个分类功能,我们可以基本归纳出它们需要:板块记录表、帖子记录表、用户表、站内 信息表、后台设置表等等。

       
    对应sp框架的模型层(Model层)而言,一个表可以说就是对应了一个模型类。而sp框架中的模型父类(spModel)为这些模型类提供大部分与数据 库存取的功能。


    页面模板:
    每一个网络系统的开发中,我们都将需要制作相当数量的页面。简单来说,控制器的每一个动作(action)都有可能产生一个页面,所以在理清所有交互,完 成控制器的设计后(未写代码前),我们就可以得到需要的页面模板的清单了。然后在模板引擎的帮助下,页面模板的制作可以与控制器的开发同时进行,以提高开 发效率。
    按照上面的PHP论坛交互的设计,那么我们可以得到的页面模板有许多,比如板块方面,有首页模板、分区模板、板块模板等;帖子方面有帖子内容模板、发帖模 板、回帖模板等。

       

        sp框架将视图层(View层)集成到了控制器内,所以在开发中,控制器将会把需要的数据发送到模板上面。而视图层所需要的开发,就仅是按照模板的语法进 行页面模板的制作即可。


      

        根据“交互、数据、页面模板”这三个关注点,那么我们就可以比较全面地去分析和设计一个网络系统了。请注意这三个关注点并非孤立的,而“交互”正是“数 据”与“页面模板”的基础,所以对“交互”的分析务必要做到正确并且完善。如果您希望了解更多关于系统分析与设计方面的知识,请到sp网站上面阅读相关文 章。


         了解基本是speedphp基本MVC思想后,下面我们将介绍speedphp框架的基本入门,方便大家继续继续学习。

    4.png (19.44 KB)

    4.png

     

  • 相关阅读:
    CentOS 5.5 安装 Oracle 11gR2 并随系统启动
    使用blockrecover 对有坏块的数据文件进行恢复
    用yum下载安装包
    PInvoke时候StringBuilder的陷阱
    mac:添加环境变量
    win8:metro app UI 设计
    用户体验&UI 实用小技巧
    Win8:To Do List Demo
    JavaScript语言精粹 ——笔记
    win8: 确保 WinJS.xhr 重新发送请求
  • 原文地址:https://www.cnblogs.com/jincon/p/1756835.html
Copyright © 2011-2022 走看看