手机版

PHP三层结构(一)简单的三层结构

时间:2021-11-24 来源:互联网 编辑:宝哥软件园 浏览:

如代码1所示:复制代码如下: //代码1 //外观层类LWordHomePage {//添加消息公共函数append($ new word){//调用中间服务层$ serv=new lword servicecore();$ serv-append($ NewWord);} };//中间服务层类LWordServiceCore {//添加消息公共函数append($ new word){//调用数据访问层$ dbTask=new lwordsdbtask();$ DBTask-append($ NewWord);} };//数据访问层classlworddbask {//添加消息公共函数append($ new word){//数据层代码(略)} };执行时序图,如图1所示:

(图1),简单的三层结构时序图。从代码和时序图中,我们可以直观地看到三层结构的调用顺序。但是这种简单的三层结构并不能满足实际开发中的需求!先说外观层和中间服务层的代码。在外观层LWordServiceCore类中使用new关键字直接创建和调用中间服务类LWordServiceCore是一种硬编码的方式。在实际的项目开发过程中,外观层和中间服务层可能由不同的人开发,即一个功能模块由多人完成。另一方面,外观层LWordServiceCore类的开发进度要等到LWordServiceCore类开发完成才能启动(换句话说,要等到中间服务层开发完成才能启动外观层),效率非常低!为了让这个项目能够被多人同时开发,我们需要削减代码设计。我们可以组织一个临时的中间服务类来满足外观层的开发进度。中间服务层开发完成后,可以进行替换.如图2所示:

(图2),外观层在不同的服务之间切换。显然,要满足这个要求,直接使用new关键字在外观层创建并调用LWordServiceCore类是非常不灵活的!很难灵活随意切换!我们可以创建一个TempService类,作为中间服务层的临时实现。我们还需要分析两个类,TempService和LWordServiceCore,它们有相同的追加函数来添加消息,只是一个是临时的,另一个是真实的。因为TempService和LWordServiceCore都有公共函数,所以它们应该有一个公共的父类。考虑到这个公共上级类没有其他成员和属性,这个公共上级类被定义为一个接口,即ILWordService!UML类图如图3所示。

(图3)定义和实现ILWordService接口:TempService或LWordServiceCore类对象不直接在ILWordService类中创建,创建过程将交给工厂类MyServiceFactory(工厂方法模式)。这样,外观层中的LWordHomePage类只需要知道ILWordService接口,外观层代码并不关心具体的中间服务代码是什么,因此极其实现了外观层和具体服务代码的分离。这相当于什么?就像两个硬件工程师,一个是制造电脑显卡,一个是制造电脑主板。制作显卡的工程师可以将显卡插入测试电路,测试显卡是否能正常工作。同样,制造主板的工程师也可以将主板插入另一个测试电路,测试主板是否可以正常工作。两位工程师完成工作后,把他们的工作联系在一起就足够了。这是一种并行开发方法,可以节省几乎一半的时间。从软件工程的角度来看,我们在设计界面代码时也要考虑是否有必要支持多人同时开发,从而提高生产效率。根据UML类图(如图3所示),我们对PHP代码进行修改,如Code 2所示:复制代码如下: //Code 2,通过工厂创建消息服务,调用//外观层类LWordHomePage {//添加消息公共函数append($ new word){//调用中间服务$ serv=my service factory 33603360 create();//注意,此时操作的是ILWordService接口,而不是LWordService类$ serv-append($ newword);} };//消息服务接口ilwordservice { public function append($ new word);};//服务工厂类class MyServiceFactory {//创建消息服务公共静态函数create(){ if(1){//返回中间服务层返回新的LWordServiceCore();} else {//返回临时实现返回new TempService();} } }//临时服务类classtemp service实现ilwordservice {//添加消息公共函数append($ new word){//临时代码(省略)} };//中间服务层类lwordservicecore实现ilwordservice {//添加消息公共函数append($ new word){//调用数据访问层$ dbTask=new lwordsdbtask();$ DBTask-append($ NewWord);} };//数据访问层classlworddbask {//添加消息公共函数append($ new word){//数据层代码(略)} };时序图如图4所示:

(图4)通过工厂类创建消息服务。

版权声明:PHP三层结构(一)简单的三层结构是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。