Heim >Backend-Entwicklung >PHP-Tutorial >PHP5:OOP - 分开业务逻辑层代码 , 是否必要
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.phprequire_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";; } }?>