PHP5:OOP -- ビジネス ロジック層のコードを分離する必要がありますか?
個人的には、MVC 3 層モデルは、ビュー層の JAVA 3 層開発モデルのサブセットにすぎないと感じています。私は、日常の Web サイト開発プロセスで、以前は MVC ベースの PHP フレームワークを使用して開発していました。以前に JAVA ワークフローを使用する プロジェクト開発後、PHP プログラマーとして以前のプロジェクト開発モデルを使用できますか?
この週末、従業員情報マネージャーの小さなデモから実現可能性をテストするために、このパスに従いました。 PHP は非常に必要ですが、まったく使用できないこともあります。これは、コードが非常に再利用できるためですが、この種のコードは作成する過程で非常に面倒で、PHP ページがリロードされます。再度呼び出されるたびに作成され初期化されます。パフォーマンスは非常に低いです。
エンタープライズ アプリケーションには問題ないようですが、この場合、PHP 本来の利点である軽量開発が便利です...
私はあまりにも詳しくないので、この結論に達しました...以下はコードです: これらのコードは、JAVA WEB プロジェクトのディレクトリ構造に従って分割され、 JAVA 3層モデル 開発ツール 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";; } } ?>