有一个大侠给了在下一个MVC的留言板,但是在下关于MVC还是有点疑惑。

sssolweb_003 2010-12-05 08:39:39
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。请多多指教。。。
...全文
156 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
楼主啊,我跟你一样啊。
我到现在为止都没觉得mvc写有什么好处。就好比你这个帖子中写的那些代码,你觉得他优秀好阅读吗?
不垃圾吗?HTML和php混写的无比厉害,明明几行代码就可以解决的事情,却非得要用mvc来。
而且还要自己另外再写类,来凑合出一个所谓的MVC.

MVC这东西根本就不适合PHP。java里面的东西,但是有些PHP就是喜欢形而上学。
邯郸学步。

mvc 完全是忽悠人的玩意儿。
sssolweb_003 2010-12-10
  • 打赏
  • 举报
回复
沪php攻城师 2010-12-07
  • 打赏
  • 举报
回复
对数据进行处理的当然都是M了
sssolweb_003 2010-12-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jzh2004 的回复:]
问题一:这里实现的是数据库的操作,应该不包含在MVC中吧?

数据库操作当然也包含在MVC中,就是M啊,像楼上说的处理数据的操作
[/Quote]

DataAccess.php也属于M层?


沪php攻城师 2010-12-06
  • 打赏
  • 举报
回复

问题一:这里实现的是数据库的操作,应该不包含在MVC中吧?

数据库操作当然也包含在MVC中,就是M啊,像楼上说的处理数据的操作
igaojie 2010-12-05
  • 打赏
  • 举报
回复
v 视图 方便美工和程序员的工作分离
c 控制器 接受参数 逻辑跳转
m 模型 一般处理数据操作

很多项目里面并不是严格分的很清楚的!

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧