PHP5:OOP -- 分离业务逻辑层代码 , 是否必要?
个人感觉MVC三层模型,仅仅是JAVA三层开发模型中在视图层中的一个子集.在日常开发网站的过程中,我都在使用基于MVC的PHP框架来开发.之前使用JAVA工作流做过项目开发,作为PHP程序员,能否用到以前的项目开发模式呢?
这个周末就循着这个路子从一个员工信息管理器的小demo来测试可行性.结果发现PHP很需要但是也可以完全不要使用.因为这样是可以很好的重复使用代码,但是这种代码在编写的过程中相当的繁琐,加上PHP页面在每次重新调用时都会重新加载,创建和初始化.性能很低..
做企业应用似乎还行,但是这样的话也就丧失了PHP原本的优势,便捷的轻量级开发...
可能是我懂的东西太少了,才得出这个结论吧...请大家斧正! 以下是代码:这些代码按照JAVA的WEB项目目录结构划分,以及按照JAVA三层模型来实现的.开发工具Eclipse3.3
│ .project │ index.php │ webconf.php │ ├─WEB-INF │ ├─lib │ │ └─cn │ │ └─iamsese │ │ └─core │ ├─config │ │ dbconf.php │ │ │ └─classes │ └─vb2005xu │ └─sinlet │ ├─service -- 这里是逻辑层的代码 │ │ │ IPersonService.php -- 服务接口 │ │ │ │ │ ├─impl │ │ │ PersonServiceImpl.php -- 服务实现 │ │ │ │ │ └─bo │ │ Person.php -- 业务对象 │ │ PersonManager.php -- │ │ PersonRecord.php -- 这个由DAO层来实现 │ │ │ ├─ui │ ├─exception │ └─dao │ PersonRecordDaoImpl.php │ ├─META-INF │ MANIFEST.MF │ ├─admin ├─.settings │ org.eclipse.php.core.projectOptions.prefs │ └─.cache
<?php /** *文件名称: /myworkfolw/webconf.php *编码类型: UTF-8 *开发时间: 2008 下午11:43:45 *开发者: 许消寒 [iamses.cn] *版权所有者: 许消寒[iamses.cn] * *功能描述: * 应用的服务环境配置参数,因为模拟的是JAVA Web应用的目录格式,所以要在此文件中 *进行必要的常量声明,从而固定系统的访问路径. * *此文件名称不能改变的,最好作为设置成只读 */ /** * 这里滚翻一下语法,凡是系统定义的常量 一律以单词第一个字母大写 * 多个单词使用下划线加单词首字母大写的格式来定义变量, * 不能使用-来作为变量分隔符号,后面要用到它 * */ //返回当前文件所在的目录路径,取得的值后面不带/或者\符号 define("Web_Root",dirname(realpath(__FILE__))) ; //定义系统库所在路径 define("Lib_Path", Web_Root . "/WEB-INF/lib/") ; //定义用户库所在路径 define("Class_Path", Web_Root . "/WEB-INF/classes/") ; //定义配置文件所在路径 -- 存放用户定义的配置文件所在地 define("Config_Path", Web_Root . "/WEB-INF/conf/") ; echo Web_Root ; //测试使用 //定义常用的一些方法,比如文件,模块,配置文件的加载的一些方法 /** * 加载一个文件,实际上是对require_once的封装 * 并加了做了错误处理功能,这里仅仅是一个简单的功能 * 在系统核心中应该扩充这个函数 * * @param String $file */ function LoadFile($file){ require_once $file; } /** * 加载用户库所在路径下的文件 * * @param String $file */ function LoadUserClassFile($file){ $file = Class_Path . $file ; LoadFile($file); } /** * 加载系统库所在路径下的文件 * * @param String $file */ function LoadLibFile($file){ $file = Lib_Path . $file ; LoadFile($file); } ?>
<?php /** *文件名称: /myworkfolw/index.php *编码类型: UTF-8 *开发时间: 2008 下午11:38:38 *开发者: 许消寒 [iamses.cn] *版权所有者: 许消寒[iamses.cn] * *功能描述: * 加载常用的配置参数,作为应用的单一入口 * */ //加载环境配置文件: webconf.php require_once 'webconf.php'; LoadUserClassFile("vb2005xu/sinlet/service/IPersonService.php"); //##################################################################################### //################以下代码纯属测试使用,正式开发时这个应该放到UI层的Action中封装使用############### /** * 返回 组员信息管理服务接口的实现对象 * 应该是由组件自动封装的,通过配置文件.在JAVA中这一般是使用IOC来封装的 * * @return IPersonService */ function getPersonService(){ LoadUserClassFile("vb2005xu/sinlet/service/impl/PersonServiceImpl.php"); LoadUserClassFile("/vb2005xu/sinlet/dao/PersonRecordDaoImpl.php"); $personService = new PersonServiceImpl(); //创建接口实现类的实例 $personManager = new PersonManager(); $personService->setManager($personManager); $personRecord = new PersonRecordDaoImpl(); $personManager->setRecorder($personRecord); //这里因为传递的都是引用,而且使用的是PHP5代码,所以无需使用&来表示传递引用值 return $personService ; } $personService = getPersonService(); echo "<br/>" ; $personService->addPerson(""); echo "<br/>" ; $personService->delPerson(""); echo "<br/>" ; $personService->viewPerson(""); echo "<br/>" ; $personService->listPerson(""); echo "<br/>" ; $personService->updatePerson(""); ?>
<?php /** *文件名称: /myworkfolw/WEB-INF/classes/vb2005xu/sinlet/service/IPersonService.php *编码类型: UTF-8 *开发时间: 2008 上午12:46:09 *开发者: 许消寒 [iamses.cn] *版权所有者: 许消寒[iamses.cn] * *功能描述: * 单表操作 -- 基本的员工信息管理服务接口 */ /** * 接口关键字前面不包含任何 访问控制关键字 * */ LoadUserClassFile("vb2005xu/sinlet/service/bo/Person.php"); interface IPersonService { /** * 添加一个组员 * * @param Person $person */ public function addPerson($person); /** * 更新组成员信息 * * @param Person $person */ public function updatePerson($person); /** * 删除组员 -- 根据用户id数组 * * @param array(int) $userIDs */ public function delPerson($userIDs); /** * 查看组员信息 -- 根据指定用户ID * * @param int $userID */ public function viewPerson($userID); /** * 根据查询条件列表对象来获取组员信息集合 * * @param ListObject $listobject */ public function listPerson($listobject); } ?>
<?php /** *文件名称: /myworkfolw/WEB-INF/classes/vb2005xu/sinlet/service/bo/Person.php *编码类型: UTF-8 *开发时间: 2008 上午01:07:49 *开发者: 许消寒 [iamses.cn] *版权所有者: 许消寒[iamses.cn] * *功能描述: * 组员信息对象 */ /** * 类成员都必须使用关键字public、protected 或 private 进行定义 * 并且成员对象中 var 关键字不能再被使用, * class 关键字之前不能使用访问控制符 * */ class Person { /** * 组员id,年龄和性别 * * @var int */ public $userID , $userAge,$userGender; /** * 组员姓名和生日 * * @var String */ public $userName , $userBrithday ; /** * 组员介绍 * * @var String */ public $userIntroduction ; /** * 属性访问控制器: get 方法 根据指定的属性名称返回 属性值 * * @param String $property * @return value */ public function get($property){ return $this->$property ; } /** * 属性访问控制器: set 方法 根据指定的属性名称和值 操作类属性 * * @param String $property * @param value $value */ public function set($property,$value){ $this->$property = $value; } } ?>
<?php /** *文件名称: /myworkfolw/WEB-INF/classes/vb2005xu/sinlet/service/impl/PersonServiceImpl.php *编码类型: UTF-8 *开发时间:2008-11-28 上午01:56:46 *开发者: 许消寒 [iamses.cn] *版权所有者: 许消寒[iamses.cn] * *功能描述: * 组员信息管理服务层的实现 * 至此组员信息管理系统的 服务层模块 已经完工 * * 但是这个里面 还有一个接口PersonRecord 未被实现 *这个留待 dom 层来实现, 这样就分出了三层应用的模型 * */ LoadUserClassFile("vb2005xu/sinlet/service/IPersonService.php"); LoadUserClassFile("vb2005xu/sinlet/service/bo/PersonManager.php"); class PersonServiceImpl implements IPersonService { /** * 组员信息管理器对象 * * @var PersonManager */ private $manager ; /** * 返回 组员信息管理器对象 * * @return PersonManager */ public function getManager(){ return $this->manager ; } /** * 设置 组员信息管理器对象 * * @param PersonManager $manager */ public function setManager($manager) { $this->manager = $manager; } /** * 添加一个组员 * * @param Person $person */ public function addPerson($person){ $this->getManager()->addPerson($person); } /** * 更新组成员信息 * * @param Person $person */ public function updatePerson($person){ $this->getManager()->updatePerson($person); } /** * 删除组员 -- 根据用户id数组 * * @param array(int) $userIDs */ public function delPerson($userIDs){ $this->getManager()->delPerson($userIDs); } /** * 查看组员信息 -- 根据指定用户ID * * @param int $userID */ public function viewPerson($userID){ $this->getManager()->viewPerson($userID); } /** * 根据查询条件列表对象来获取组员信息集合 * * @param ListObject $listobject */ public function listPerson($listobject){ $this->getManager()->listPerson($listobject); } } ?>
<?php /** *文件名称: /myworkfolw/WEB-INF/classes/vb2005xu/sinlet/service/bo/PersonManager.php *编码类型: UTF-8 *开发时间: 2008 上午01:30:45 *开发者: 许消寒 [iamses.cn] *版权所有者: 许消寒[iamses.cn] * *功能描述: * 组员信息管理器 */ LoadUserClassFile("vb2005xu/sinlet/service/bo/PersonRecord.php"); class PersonManager{ /** * 组员信息管理数据记录器对象 * * @var PersonRecord */ private $recorder ; /** * 返回 组员信息管理数据记录器对象 * * @return PersonRecord */ public function getRecorder(){ return $this->recorder ; } /** * 设置 组员信息管理数据记录器对象 * * @param PersonRecord $recorder */ public function setRecorder($recorder) { $this->recorder = $recorder; } /** * 添加一个组员 * * @param Person $person */ public function addPerson($person){ $this->getRecorder()->addPerson($person); } /** * 更新组成员信息 * * @param Person $person */ public function updatePerson($person){ $this->getRecorder()->updatePerson($person); } /** * 删除组员 -- 根据用户id数组 * * @param array(int) $userIDs */ public function delPerson($userIDs){ $this->getRecorder()->delPerson($userIDs); } /** * 查看组员信息 -- 根据指定用户ID * * @param int $userID */ public function viewPerson($userID){ $this->getRecorder()->viewPerson($userID); } /** * 根据查询条件列表对象来获取组员信息集合 * * @param ListObject $listobject */ public function listPerson($listobject){ $this->getRecorder()->listPerson($listobject); } } ?>
<?php /** *文件名称: /myworkfolw/WEB-INF/classes/vb2005xu/sinlet/service/bo/PersonRecord.php *编码类型: UTF-8 *开发时间: 2008 上午01:27:48 *开发者: 许消寒 [iamses.cn] *版权所有者: 许消寒[iamses.cn] * *功能描述: * 组员信息管理数据记录器 */ LoadUserClassFile("vb2005xu/sinlet/service/bo/Person.php"); interface PersonRecord { /** * 添加一个组员 * * @param Person $person */ public function addPerson($person); /** * 更新组成员信息 * * @param Person $person */ public function updatePerson($person); /** * 删除组员 -- 根据用户id数组 * * @param array(int) $userIDs */ public function delPerson($userIDs); /** * 查看组员信息 -- 根据指定用户ID * * @param int $userID */ public function viewPerson($userID); /** * 根据查询条件列表对象来获取组员信息集合 * * @param ListObject $listobject */ public function listPerson($listobject); } ?>
<?php /** *文件名称: /myworkfolw/WEB-INF/classes/vb2005xu/sinlet/dao/PersonRecordImpl.php *编码类型: UTF-8 *开发时间:2008-11-28 上午02:04:33 *开发者: 许消寒 [iamses.cn] *版权所有者: 许消寒[iamses.cn] * *功能描述: * 组员信息记录器的dao层 简单实现 */ LoadUserClassFile("vb2005xu/sinlet/service/bo/PersonRecord.php"); class PersonRecordDaoImpl{ /** * 添加一个组员 * * @param Person $person */ public function addPerson($person){ echo "add suc"; } /** * 更新组成员信息 * * @param Person $person */ public function updatePerson($person){ echo "update suc";; } /** * 删除组员 -- 根据用户id数组 * * @param array(int) $userIDs */ public function delPerson($userIDs){ echo "del suc"; } /** * 查看组员信息 -- 根据指定用户ID * * @param int $userID */ public function viewPerson($userID){ echo "view suc";; } /** * 根据查询条件列表对象来获取组员信息集合 * * @param ListObject $listobject */ public function listPerson($listobject){ echo "list suc";; } } ?>