前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP设计模式——门面模式

PHP设计模式——门面模式

作者头像
Lemon黄
发布2019-11-24 16:07:42
5530
发布2019-11-24 16:07:42
举报
文章被收录于专栏:Lemon黄Lemon黄

为子系统中的一组接口提供统一的接口。Facade(门面)定义了一个更高级别的界面,使子系统更易于使用。

作为一名软件开发人员,我们所有人要做的一个主要任务就是部署。与我们所有人相似,当Eric刚开始作为开发人员的职业生涯时,他是手动完成所有部署工作的。他使用一种非常标准的方法来做到这一点:将服务器设置为脱机模式,传输源代码文件,更新数据库的架构以及将服务器设置为联机:

代码语言:javascript
复制
$server->offline();
$fileSystem->transferFiles();
$database->updateSchema();
$server->online();

这似乎是理想的方法。这个过程很简单明了。但是,随着越来越多的程序被引入,人为错误开始发生。新程序(例如在传输文件之前运行测试)变得更加频繁。有一次,他的同事在当天失业后看到埃里克(Eric)赶回办公室。他们问:“嗨,Eric!急什么?” Eric毫不犹豫地答道:“我忘了在将服务器重新设置为联机之前先更新数据库!”众所周知,人为错误是不可避免的,但可以将其最小化。我们意识到我们需要更好的解决方案 。

如果我们能够将所有过程封装到一个简单的方法中会怎样?这样一来,我们就不必担心忘记任何步骤。要更新程序,我们只需要就地更新即可。在这种情况下,我们可以使用门面模式(Facade Pattern)。

让我们看看它在代码中的表示:

代码语言:javascript
复制
class DeployFacade
{
    private $server = null;
    private $fileSystem = null;
    private $database = null;
    public function  __construct(Server $server, FileSystem $fileSystem, Database $database)
    {
        $this->server = $server;
        $this->fileSystem = $fileSystem;
        $this->database = $database;
    }
 
    public function deploy()
    {
        $this->server->offline();
        $this->transferFiles();
        $this->updateSchema();
        $this->online();
    }
}

现在,每次Eric需要进行部署时,他只需要执行以下操作:

代码语言:javascript
复制
$deployFacade->deploy();

您可能会很快意识到,实际上我们已经在使用与DeployFacade类似的东西,即部署脚本。这是门面模式(Facade Pattern)的一个示例。在我们的示例中,通过使用门面模式(Facade Pattern),它为子系统中的一组接口(服务器,文件系统和数据库)提供了统一的接口(DeployFacade)。 Facade定义了更高级别的接口,使子系统更易于使用。再也不会忘记任何一步。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lemon黄 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档