PHP三层结构(上)简单三层结构
如代码1所示:复制代码代码如下所示:
代码1
/外观层类
类lwordhomepage {
添加消息
公共功能追加($ newlword){
呼叫/中间服务层
为服务=新lwordservicecore();
为服务->添加($ newlword);
}
};
中间服务层
类lwordservicecore {
添加消息
公共功能追加($ newlword){
调用数据访问层
dbtask美元=新lworddbtask();
dbtask美元->添加($ newlword);
}
};
数据访问层
类lworddbtask {
添加消息
公共功能追加($ newlword){
数据层代码(省略)
}
};
执行序列图,如图1所示。
(图1)一个简单的三层结构顺序图
三层结构的调用顺序可以直接从代码和时序图中看出,但这种简单的三层结构的实际开发不能满足需求!我们先讨论两层代码从现象层、中间服务层。它是一个硬编码的方式来创建和调用中间服务类lwordservicecore直接使用new关键字在外表层lwordhomepage类。在实际的项目开发过程中,从现象层、中间服务层可以通过不同的人才,开发出一个功能模块,由多人完成。外层类lwordhomepage发展后才开始lwordservicecore充分发展是不可能的(换句话说,外观不能等到中间层服务层充分发展的开始)的合作效率很低,所以!为了使多个人员同时开发项目,我们需要减少代码设计,我们可以组织一个临时的中间服务类来满足外观层的开发进度,当中间层充分开发时,可以替换它,如图2所示,
(图2),外观层在不同的服务之间切换。
显然,要实现这样的要求,这是非常灵活的创建和调用lwordservicecore类直接在外表层使用new关键字!灵活多变是很困难的!我们可以创建一个tempservice类作为中间服务层的暂行实施。我们还需要分析两类tempservice和lwordservicecore,都具有相同的附加功能添加的信息,但一个是临时的,其他的是真实的,因为这两类tempservice和lwordservicecore有共同的功能,应该有一个共同的父类。考虑到有没有其他的成员,这个共同的上级类属性、共同的上级类别定义为一个接口,即ILWordService!UML类图如图3所示。
(图3)的ilwordservice接口的定义和实现
在lwordhomepage类,tempservice或lwordservicecore类对象不能直接创建的,而创作的过程是被分配到一个工厂类myservicefactory(简单工厂模式),在外表层的lwordhomepage类只需要知道ilwordservice接口。外观层代码不关心特定的中间服务代码是什么,从而实现外观层和特定服务代码之间的分离。
这等同于什么这就像是两个硬件工程师,一个让计算机显卡,使电脑主板等。工程师谁使一个视频卡可以插入视频卡到测试电路来测试是否一个视频卡不能正常工作。同样,工程师让主板也可以插入到另一个测试电路主板测试主板是否能正常工作。由两个工程师有时间完成他们的工作,他们将能够加入他们的工作成果。这是一个并行开发的方法,可以节省近一半的时间。从软件工程的角度来看,我们的设计界面的代码时,我们应该还考虑是否需要支持多人开发的T同时,提高生产效率。
根据UML类图(如图3所示),我们修改PHP代码,如代码2所示:
复制代码代码如下所示:
2,通过工厂创建消息服务和调用
/外观层类
类lwordhomepage {
添加消息
公共功能追加($ newlword){
调用服务
为服务= myservicefactory::创建();
请注意,ilwordservice接口 / /操作,而不是lwordservice类
为服务->添加($ newlword);
}
};
消息服务接口
接口ilwordservice {
公共功能追加($ newlword);
};
服务/工厂
类myservicefactory {
创建消息服务
公共静态函数创建(){
如果(1){
返回到中间服务层
返回新的lwordservicecore();
{人}
返回临时实现
返回新的tempservice();
}
}
}
//临时服务
类tempservice实现ilwordservice {
添加消息
公共功能追加($ newlword){
//临时代码(省略)
}
};
中间服务层
类lwordservicecore实现ilwordservice {
添加消息
公共功能追加($ newlword){
调用数据访问层
dbtask美元=新lworddbtask();
dbtask美元->添加($ newlword);
}
};
数据访问层
类lworddbtask {
添加消息
公共功能追加($ newlword){
数据层代码(省略)
}
};
序列图如图4所示。
(图4)通过工厂类创建消息服务