MVC是不是指:model,view,controller呢?DataAccess.php代码如下:
<?php
/**
*  一个用来访问MySQL的类
*  仅仅实现演示所需的基本功能,没有容错等
*  代码未作修改,只是把注释翻译一下,加了点自己的体会
*/
class DataAccess {
    var $link_id; //用于存储数据库连接
    var $query_id; //用于存储查询源
    //! 构造函数.
    /**
    * 创建一个新的DataAccess对象
    * @param $host 数据库服务器名称
    * @param $user 数据库服务器用户名
    * @param $pass 密码
    * @param $db   数据库名称
    */
    function __construct($host,$user,$pass,$db) {
        $this->link_id=mysql_pconnect($host,$user,$pass); //连接数据库服务器
        mysql_select_db($db,$this->link_id);              //选择所需数据库
        //mysql_query("set names utf8;");
    }
    //! 执行SQL语句
    /**
    * 执行SQL语句,获取一个查询源并存储在数据成员$query中
    * @param $sql  被执行的SQL语句字符串
    * @return void
    */
    function query($sql) {
        $this->query_id=mysql_unbuffered_query($sql,$this->link_id); //Perform query here
        if ($this->query_id) return true;
        else return false;
        }
    
    //! 获取结果集
    /**
    * 以数组形式返回查询结果的所有记录
    * @return mixed
    */
    function fetchRows($sql) {
        $this->query($sql);
     $arr=array();
      $i=0;
      while( $row=mysql_fetch_array($this->query_id,MYSQL_ASSOC) )  //MYSQL_ASSOC参数决定了数组键名用字段名表示
      {   
        $arr[$i]=$row;
              $i++;
       }
        return $arr;
    }
}
?>问题一:这里实现的是数据库的操作,应该不包含在MVC中吧?
Model.php
代码如下:
<? 
class Model
{
  var $dao;  function __construct (&$dao)
  {
    $this->dao = $dao;
  }
  
  function sum(){   
    $notes = $this->dao->fetchRows("SELECT * FROM note");
    $sum = count($notes);
    return $sum;  
  }
  
  function listNote ($perNumber)
  {
    $page=$_GET['page'];
    if (!isset($page)) {
        $page=1;
    } 
    $startCount=($page-1)*$perNumber;
    $notes =$this->dao->fetchRows("select * from note order by timedate desc limit $startCount,$perNumber");
    return $notes;
  }  function postNote ()
  {
    $name = $_POST['username'];
    $email = $_POST['email'];
    $content = $_POST['content'];
    $timedate = date ("y-m-d H:i",time());
    
    $sql ="insert into note(name,email,content,timedate) values('".$name."','".$email."','".$content."','".$timedate."')";
    if ($this->dao->query ($sql))
      return true;
    else
      return false;
  }  function deleteNote ()
  {
    $sql = "delete from note where id=".$_GET['id'];
    if($this->dao->query ($sql))
      return true;
    else
      return false;
  }
}
?>问题二:Model属于MVC中的M层吧。但是M层主要实现的是什么功能呢?与DataAccess有什么很大的差别吗?
View.php
代码如下:
<? 
class View
{
  var $output;
  var $totalNumber;
  var $toatalPage;      
    
  function display ()
  {
    echo ($this->output);
  }
}
class listView extends View
{
  
  function __construct ($notes,$perNumber,$totalNumber)
  {    
    $page=$_GET['page'];
    if (!isset($page)) {
        $page=1;
    }     
    $totalPage=ceil($totalNumber/$perNumber); 
    echo $totalPage;
    echo $page;
    foreach ($notes as $value)
    {
        
      $this->output.= "<p><strong>访客姓名:</strong>".$value['name']."</p>".
    "<p><strong>访客邮箱:</strong>".$value['email']."</p>".
    "<p><strong>访客留言:</strong>".$value['content']."</p>".
    "<p><strong>来访时间:</strong>".$value['timedate']."</p>".
    "<p align=\"right\"><a href=\"index.php?action=delete&id=".$value['id']."\">删除留言</a>"."<hr />";
    }
    if($page!=1){
    
       $this->output.= "<a href=\"index.php?action=list&page=".($page-1)."\">上一页</a>";
    }
            
    if ($page<$totalPage){
    
       $this->output.= "<a href=\"index.php?action=list&page=".($page+1)."\">下一页</a>";
    }
  }
}
class postView extends View
{
  function __construct ($success)
  {
    if ($success)
      $this->output =
    "留言成功!<br><a href=\"".$_SERVER['PHP_SELF']."?action=list\">查看</a>";
    else
      $this->output = "留言保存失败!";
  }
}
class deleteView extends View
{
  function __construct ($success)
  {
    if ($success)
      $this->output =
    "留言删除成功!<br><a href=\"".$_SERVER['PHP_SELF']."?action=list\">查看</a>";
  }
 }
 ?>问题三:view.php应该是MVC中的V层。但是View层主要实现的是什么功能呢?好像是前台逻辑。
Controller.php
代码如下:
<? 
class Controller
{
  var $model;
  var $view;  function __construct (&$dao)
  {
    $this->model = &new Model ($dao);
  }  function getView ()
  {
    return $this->view;
  }
}class listController extends Controller
{
  function __construct (&$dao,$perNumber)
  {
    parent::__construct ($dao);
    
    $totalNumber = $this->model->sum();
    $notes = $this->model->listNote ($perNumber);
    $this->view = &new listView ($notes,$perNumber,$totalNumber);
  }
}class postController extends Controller
{
  function __construct (&$dao)
  {
    parent::__construct ($dao);
    if ($this->model->postNote ())
      $success = 1;
    else
      $success = 0;
    $this->view = &new postView ($success);
  }
}class deleteController extends Controller
{
  function __construct (&$dao)
  {
    parent::__construct ($dao);
    if ($this->model->deleteNote ())
      $success = 1;
    else
      $success = 0;
    $this->view = &new deleteView ($success);
  }
}
?>问题四:Controller.php应该是MVC中的C层。貌似是吧,M和C层中的东西整合在一起了。请问这一层又主要实现的什么功能?MVC架构有什么优势?他好像和传统的三层有点不太一样,BLL、DAL、UI。请多多指教

解决方案 »

  1.   

    v 视图 方便美工和程序员的工作分离
    c 控制器 接受参数 逻辑跳转
    m 模型 一般处理数据操作很多项目里面并不是严格分的很清楚的!
      

  2.   


    问题一:这里实现的是数据库的操作,应该不包含在MVC中吧?数据库操作当然也包含在MVC中,就是M啊,像楼上说的处理数据的操作
      

  3.   


    DataAccess.php也属于M层?
      

  4.   

    楼主啊,我跟你一样啊。
    我到现在为止都没觉得mvc写有什么好处。就好比你这个帖子中写的那些代码,你觉得他优秀好阅读吗?
    不垃圾吗?HTML和php混写的无比厉害,明明几行代码就可以解决的事情,却非得要用mvc来。
    而且还要自己另外再写类,来凑合出一个所谓的MVC.MVC这东西根本就不适合PHP。java里面的东西,但是有些PHP就是喜欢形而上学。
    邯郸学步。mvc 完全是忽悠人的玩意儿。