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";;
}
}
?>
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
C++高性能并发应用_C++如何开发性能关键应用
Java AI集成Deep Java Library_Java怎么集成AI模型部署
Golang后端API开发_Golang如何高效开发后端和API
Python异步并发改进_Python异步编程有哪些新改进
C++系统编程内存管理_C++系统编程怎么与Rust竞争内存安全
Java GraalVM原生镜像构建_Java怎么用GraalVM构建高效原生镜像
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
C++现代C++20/23/26特性_现代C++有哪些新标准特性如modules和coroutines
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号