PHP头条
热点:

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并无JAVA的包机制[在PHP6中似乎引入了命名空间的功能,但是我仅仅熟悉PHP4,对PHP5也是刚入门]. 所以我们在这里要定义好项目的文件的加载机制和常用的一些配置参数.


webconf.php -- 这个就是.看代码:



每个项目每个程序都会有一个入口文件,WEB应用也一样,这里的index.php文件也是.你可以把它想成是JAVA类文件中的main方法. 代码如下:
setManager($personManager);
	
	$personRecord = new PersonRecordDaoImpl();
	$personManager->setRecorder($personRecord);
	
	//这里因为传递的都是引用,而且使用的是PHP5代码,所以无需使用&来表示传递引用值
	
	return $personService ;	
}
$personService = getPersonService();
echo "
" ; $personService->addPerson(""); echo "
" ; $personService->delPerson(""); echo "
" ; $personService->viewPerson(""); echo "
" ; $personService->listPerson(""); echo "
" ; $personService->updatePerson(""); ?>


在index.php文件,测试块代码中.其实在这里本想实现一个小型的IOC来,使用PHP来实现IOC真的很简单,这里由于只是测试一种思路,所以将其舍去了.那个代码可以参阅我之前写的文章.

首先引入抽象的接口文件LoadUserClassFile("vb2005xu/sinlet/service/IPersonService.php");
这个函数在webconf.php中定义,用于加载WEB-INF/classes/下的文件.目录结构如上.

现在基本的准备工作已经做完,让我们进入具体的.... (*^__^*) 嘻嘻……




引入这行代码是业务对象代码.
LoadUserClassFile("vb2005xu/sinlet/service/bo/Person.php");
$property ;
	}
	
	/**
	 * 属性访问控制器: set 方法 根据指定的属性名称和值 操作类属性
	 *
	 * @param String $property
	 * @param value $value
	 */
	public function set($property,$value){
		$this->$property = $value;
	}
	
}
?>


PersonServiceImpl.php是服务的是实现类:
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);
	}
	
}
?>



LoadUserClassFile("vb2005xu/sinlet/service/IPersonService.php");
这个看上边的接口
LoadUserClassFile("vb2005xu/sinlet/service/bo/PersonManager.php");
这个是作为层层抽象出来的,可有可无,不过为了扩展而已,我之前所在的JAVA公司就是这样做的,我也提出疑问,他们就是这样回答我的.... 或许这也是我离开JAVA的一个小因素...


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);
	}
	
}
?>



LoadUserClassFile("vb2005xu/sinlet/service/bo/PersonRecord.php");
加载员工对象的记录管理器,她是一个接口,提供给DAO层实现






到这里,业务逻辑层的代码已经基本完成,只要我们实现PersonRecord接口就可以实现应用.

往上看index.php中的getPersonService()函数
LoadUserClassFile("/vb2005xu/sinlet/dao/PersonRecordDaoImpl.php");
看它的代码,这里并无具体的DAO层实现,只有一些测试代码







以上列出了所有代码,在PHP5.1以上的版本都可以正常运行.

总结好处: 可以方便代码的实现分离,加快团队的开发速度.当然是指7人以上的团队.但是对于PHP项目来讲,一般不太现实,很繁琐,呵呵呵

谢谢你有耐心看完这些代码....

www.phpzy.comtrue/phprm/25574.htmlTechArticlePHP5:OOP-分开业务逻辑层代码,是否必要 PHP5:OOP -- 分离业务逻辑层代码 , 是否必要? 个人感觉MVC三层模型,仅仅是JAVA三层开发模型中在视图层中的一个子集.在日常开发网站的过程中,我都在...

相关文章

PHP之友评论

今天推荐