大家来讨论一下这样写PHP的弊和利端吧。类似java的MVC

HuaLikeDotNet 2010-07-22 10:20:32
模仿的MVC。看看这样到底好不好。或者提供更好的编程思想。大家讨论讨论吧。
源码如下。业务对outbox表进行了一个查询。并分页。功能基本上完成。一共有5个PHP page。
源码文件分为:
不好意思名字命名跟php不是很规范
dao:outboxdao.php,//访问数据库操作
biz:outboxbiz.php,//业务类
view displaybox.php.//显示数据

公共类:
pageBean.php//封装分页的业务
DBConnection.PHP//得到连接数据库的

下面是源码。

//outboxdao.php
include_once("../../comm/dao/DBConnection.php");
class outboxdao{
/**
* 得到数组
*/
public function getList($offset,$pageSize){

$dbconndb = new DBConnection();
$conn = $dbconndb->getConnection();
mysql_select_db("kalkun");
mysql_query("set names gb2312");
$sql="select ID, DestinationNumber,TextDecoded ,InsertIntoDB from outbox order by ID asc limit ".$offset.",".$pageSize;
$ret = mysql_query($sql,$conn);
//echo $sql."<br/>";
while($list=mysql_fetch_array($ret)){
$row[] = $list;
}
mysql_close($conn);
return $row;

}
/**
* 统计总行数
*/
public function countAllRow(){
$dbconndb = new DBConnection();
$conn = $dbconndb->getConnection();
mysql_select_db("kalkun");
$sql="select count(1) from outbox ";
$ret=mysql_query($sql);
$row = mysql_fetch_array($ret);
mysql_close($conn);
return $row[0];

}
}
?>
//comm/dao/DBConnection.php
<?php
class DBConnection{
public static $dbname;
public static $dbaddr="localhost";
public static $dbName="root";
public static $dbpassword="sa";
public static $dbconInstance = null;

/**
* 得到连接
*/
public static function getConnection(){
return mysql_connect(DBConnection::$dbaddr,DBConnection::$dbName,DBConnection::$dbpassword);

}
/**
* 关闭连接
*/
public static function closeCon($link){
mysql_close($link);
}
}
?>
<?php
//pageBean.php 分页封装类
class pageBean {
private $allRow=0;//总行数
private $currentPage;//当前页
private $pageSize ;//每页显示行数
private $totalPage ;//总页数

private $dadalist = array();//存储数据集合


public function setDatalist($dadalist){
$this->dadalist=$dadalist;

}
public function getDatalist(){
//print_r($this->datalist);
return $this->dadalist;
}

public function setAllRow($allRow){
$this->allRow=$allRow;
}
public function getAllRow(){
return $this->allRow;
}
public function setCurrentPage($currentPage)
{
$this->currentPage=$currentPage;
}
public function getCurrentPage(){
return $this->currentPage;
}
public function setPageSize($pagesize){
$this->pageSize=$pagesize;
}
public function getPageSize(){
return $this->pageSize;
}

public function setTotalPage($totalPage){
$this->totalPage=$totalPage;
}
public function getTotalPage(){
return $this->totalPage;
}
/**
* 统计总页数
*/
static function countPage($pagesize, $countrow) {
//$pageCount= countrow()%$pagesize==0?(countrow()/$pagesize):((int)(countrow()/$pagesize)+1);
if ($countrow % $pagesize == 0) {
$pageCount = $countrow / $pagesize;
} else {
$pageCount = (int) ($countrow / $pagesize) + 1;

}
return $pageCount;
}
/**
* 计算当前指开始记录数
*/
static function countOffset($pagesize, $currentPage) {
return $pagesize * ($currentPage -1);
}
}
?>
//outboxbiz.php
<?php
/*
* Created on 2010-7-21
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/
include_once("outboxdao.php");
include_once("../pageBean.php");
class outboxbiz{
public function getoutboxPageBean($currentPage,$pageSize){
$outboxdao = new outboxdao();
$dbconn = new DBConnection();
$offset = pageBean::countOffset($pageSize,$currentPage);//计算开始记录数
$allRow = $outboxdao->countAllRow();//得到总行数
$row = $outboxdao->getList($offset,$pageSize);//指定到数据
pageBean::countPage($pageSize,$allRow);//总页数
//print_r($row);
$pageBean = new pageBean();
$pageBean->setAllRow($allRow);
$pageBean->setPageSize($pageSize);
$pageBean->setCurrentPage($currentPage);
$pageBean->setDatalist($row);
$pageBean->setTotalPage(pageBean::countPage($pageSize,$allRow));
$datalist=$pageBean->getDatalist();
return $pageBean;

}
}
?>
//displayoutbox.php
<html>
<head>
<meta http-equiv="Content-Language" content="en" />
<meta name="GENERATOR" content="PHPEclipse 1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>title</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#FF9966" vlink="#FF9966" alink="#FFCC99">
<TABLE id=oTableHead border=1>
<TR>
<td class=Ibx_td_From>
ID
</td>
<td class=Ibx_td_From>
收信号码
</td>
<td class=Ibx_td_Subject>
主题
</td>
<td class=Ibx_td_Date>
日期
</td>
</TR>
<?php
include_once("outboxbiz.php");
include_once("../pageBean.php");
$outboxbiz=new outboxbiz();
$pageSize=10;
$page=$_GET["p"];
echo $page;
$currentPage=isset($page)?intval($page):1;

$pageBean = $outboxbiz->getoutboxPageBean($currentPage,$pageSize);
$currentPage=$pageBean->getCurrentPage();
$pageCount=$pageBean->getTotalPage();
//$row=$pageBean->datalist;//此处不明:pageBean 类中的定义私用变量。
//$row = array();
$row = $pageBean->getDatalist();//此处变量row得不到值。
foreach($row as $val){
echo "<tr><td>".$val["ID"]."</td><td>".$val["DestinationNumber"]."</td><td>".substr($val["TextDecoded"],0,10)."</td><td>".$val["InsertIntoDB"]."</td></tr>";
}?>

</table>
<table>
<tr>
<td>
<?php

$stringPage;
if($currentPage==1){
$stringPage.="首页 上页";
}else{
$stringPage.="<a href=?p=1>第一页</a>|<a href=?p=".($currentPage-1).">上一页</a>|";
}

if($currentPage==$pageCount || $pageCount==0){
$stringPage.="末页 下页";
}else
{
$stringPage.="<a href=?p=".$pageCount.">末页</a>|<a href=?p=".($currentPage+1).">下一页</a>|";
}
echo "<center>".$stringPage."</center>";

?>

</td>
</tr>
</table>
</body>
</html>

数据库表结构
CREATE TABLE `outbox` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`UpdatedInDB` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`InsertIntoDB` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`SendingDateTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`Text` text,
`DestinationNumber` varchar(20) NOT NULL DEFAULT '',
`Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') DEFAULT '8bit',
`UDH` text,
`Class` int(11) DEFAULT '-1',
`TextDecoded` varchar(350) NOT NULL DEFAULT '',
`MultiPart` enum('false','true') DEFAULT 'false',
`RelativeValidity` int(11) DEFAULT '-1',
`SenderID` text,
`SendingTimeOut` timestamp NULL DEFAULT '0000-00-00 00:00:00',
`DeliveryReport` enum('default','yes','no') DEFAULT 'default',
`Idfolder` int(11) DEFAULT '2',
`CreatorID` text,
PRIMARY KEY (`ID`),
UNIQUE KEY `ID` (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=223 DEFAULT CHARSET=utf8;
...全文
240 点赞 收藏 26
写回复
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
HuaLikeDotNet 2010-07-26
继续、。。。。
回复
black__art 2010-07-25
回复
ifengshow 2010-07-24
学习下
回复
HuaLikeDotNet 2010-07-24
不过要有一定基础才能适合用框架,最好自己模仿,然后设计。框架确实开发效率高。但是不熟悉或者用的不好。那就事半功倍了,70%-80%调试异常错误。其它时间才是真正的编码。而MVC这种设计模式也比较人性化,主要分工,维护给来带来的便利。大家继续讨论。
[Quote=引用 23 楼 shadowsniper 的回复:]
其实总说中小型项目不适合使用框架,不适合MVC,我觉得这是一个误区。如果你真的实际用过框架,并理解了其原理,就会知道其实框架没那么麻烦。把目录,基本的文件建立好后,你需要做的就是往里面填写代码。开发速度会很快,在开发过程中,大体的架子都搭好了,可以让你的逻辑很清晰,哪个文件用来做什么,这样你不会在写的过程中偏离最初的设计思想,并且它所带来的日后易维护性,远远大于它所带来的麻烦。
[/Quote]
回复
an9ryfr09 2010-07-24
其实总说中小型项目不适合使用框架,不适合MVC,我觉得这是一个误区。如果你真的实际用过框架,并理解了其原理,就会知道其实框架没那么麻烦。把目录,基本的文件建立好后,你需要做的就是往里面填写代码。开发速度会很快,在开发过程中,大体的架子都搭好了,可以让你的逻辑很清晰,哪个文件用来做什么,这样你不会在写的过程中偏离最初的设计思想,并且它所带来的日后易维护性,远远大于它所带来的麻烦。
回复
helloyou0 2010-07-24
[Quote=引用 21 楼 hualikedotnet 的回复:]

有道理,不过PHP好像做大项目的很少
引用 18 楼 lwmhy 的回复:
应该是大型复杂的项目做成MVC可能会好些吧,如果是中小型的项目觉得没有这样的必要
[/Quote]

我一直没搞清楚CSDN上是怎么定义大项目小项目的
回复
HuaLikeDotNet 2010-07-24
有道理,不过PHP好像做大项目的很少
[Quote=引用 18 楼 lwmhy 的回复:]
应该是大型复杂的项目做成MVC可能会好些吧,如果是中小型的项目觉得没有这样的必要
[/Quote]
回复
HuaLikeDotNet 2010-07-23
单例模式 也是不错的想法
[Quote=引用 13 楼 fancyivan 的回复:]
mvc还行,不过一些主要的类都应用使用单例模式。
[/Quote]
回复
funfun5433 2010-07-23
每天回帖即可获得10分可用分!小技巧:
回复
fancyivan 2010-07-23
mvc还行,不过一些主要的类都应用使用单例模式。
回复
美人心计1999 2010-07-23
回复
HuaLikeDotNet 2010-07-23
7楼朋友说的不错,php的smarty框架可以进行模板替换。这样静态页面就看不到php代码了。也没有业务逻辑。
[Quote=引用 7 楼 vn700 的回复:]
可以设计好命名规范,然后通过统一的入口顺序调用。
比如 访问index.php?box 加载文件
include key($_GET) . 'dao.php'
include key($_GET) . 'biz.php'
include 'display'. key($_GET) . 'php'

另外你的view里业务代码太多了,需要的变量应该在biz里定义赋值。view里只作填空。……
[/Quote]
回复
Alfredknox 2010-07-23
应该是大型复杂的项目做成MVC可能会好些吧,如果是中小型的项目觉得没有这样的必要
回复
HuaLikeDotNet 2010-07-23
看样子很少这样写的哦
回复
PIGer920 2010-07-23
让我怀念java
回复
一件很几句代码搞定的事 非要弄一大篇才舒服 这就是Java带给我们的弊病
回复
limike118020 2010-07-23
同感
[Quote=引用 2 楼 liuahuilele 的回复:]
mvc 结构很清晰
不过个人认为是复杂化的一个过程
[/Quote]
回复
helloyou0 2010-07-22
写得挺好, 在我看来只有小毛病,总体上很清晰.

回复
LX425 2010-07-22
个人觉得一般情况就不用了吧,要是一味的追求mvc框架而使得页面变得很繁琐,那么为什么不用其他语言呢?你在php中把mvc框架弄的再好,能有java的好吗?
本人水平较低,以上纯属个人想法,不一定准确。
回复
CodeBus 2010-07-22
可以设计好命名规范,然后通过统一的入口顺序调用。
比如 访问index.php?box 加载文件
include key($_GET) . 'dao.php'
include key($_GET) . 'biz.php'
include 'display'. key($_GET) . 'php'

另外你的view里业务代码太多了,需要的变量应该在biz里定义赋值。view里只作填空。
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告