旗下导航:搜·么
当前位置:网站首页 > PHP框架 > Laravel > 正文

Laravel框架中表面形式的深切剖析【laravel框架】

作者:搜搜PHP网发布时间:2019-11-27分类:Laravel浏览:130


导读:laravel框架中的表面形式(FacadePattern)是外部与一个子体系的通讯必需经由历程一个一致的表面对象举行,为子体系中的一组接口供应一个一致的界面,表面形式定义了一个...
laravel框架中的表面形式(Facade Pattern)是外部与一个子体系的通讯必需经由历程一个一致的表面对象举行,为子体系中的一组接口供应一个一致的界面,表面形式定义了一个高层接口,这个接口使得这一子体系越发轻易运用。表面形式又称为门面形式,它是一种对象构造型形式。

Laravel中我们常用到的RouteRedisAuth这些Facade就是表面形式的细致完成, 在Laravel中设想了多个表面类,每一个表面类继续自一致的笼统表面类,在笼统表面类里供应了经由历程表面类接见其背地子体系的基本要领。

关于新的营业需求,不要修正原有表面类,而应当增添一个新的细致表面类,由新的细致表面类来关联新的子体系对象,同时经由历程修正配置文件来到达不修正源代码并替换表面类的目的。

下面是一个简朴的表面形式的例子,并没有引入笼统表面类,在引见Laravel Facade的文章中我们会看到Laravel里供应了一个笼统表面类从而让我们能够轻易的依据须要增添新子体系的表面类,并让表面类能够准确代理到其对应的子体系(或许叫效劳)。

形式构造

表面形式包含以下角色:

  • Facade 表面角色

  • SubSystem 子体系角色

代码示例

<?php
class Client
{
    public function main()
    {
        (new Facade)->operation();
    }
}

class Facade
{
    private $systemA;
    private $systemB;
    
    public function __construct()
    {
        $this->systemA = new SystemA;
        $this->systemB = new SystemB;
    }
    
    public function operation()
    {
        $this->systemA->operationA();
        $this->systemB->operationB();
    }
}

class SystemA
{
    public function operationA()
    {
        //
    }
}

class SystemB
{
    public function operationB()
    {
        //
    }
}

形式剖析

依据“单一职责准绳”,在软件中将一个体系划分为若干个子体系有利于下降全部体系的庞杂性,一个罕见的设想目的是使子体系间的通讯和相互依赖关联到达最小,而到达该目的的门路之一就是引入一个表面对象,它为子体系的接见供应了一个简朴而单一的进口。 -表面形式也是“迪米特轨则”的表现,经由历程引入一个新的表面类能够下降原有体系的庞杂度,同时下降客户类与子体系类的耦合度。 - 表面形式要求一个子体系的外部与其内部的通讯经由历程一个一致的表面对象举行,表面类将客户端与子体系的内部庞杂性分离隔,使得客户端只须要与表面对象打交道,而不须要与子体系内部的许多对象打交道。 -表面形式的目的在于下降体系的庞杂水平。 -表面形式从很大水平上提高了客户端运用的便利性,使得客户端不必体贴子体系的事情细节,经由历程表面角色即可挪用相干功用。

瑕玷

表面形式的瑕玷

  • 不能很好地限定客户运用子体系类,假如对客户接见子体系类做太多的限定则减少了可变性和灵活性。

  • 在不引入笼统表面类的状况下,增添新的子体系能够须要修正表面类或客户端的源代码,违犯了“开闭准绳”。

形式扩大

  • 一个体系有多个表面类

    在表面形式中,平常只须要一个表面类,而且此表面类只要一个实例,换言之它是一个单例类。在许多状况下为了勤俭体系资源,平常将表面类设想为单例类。固然这并不意味着在全部体系里只能有一个表面类,在一个体系中能够设想多个表面类,每一个表面类都担任和一些特定的子体系交互,向用户供应响应的营业功用。

  • 不要试图经由历程表面类为子体系增添新行动

    不要经由历程继续一个表面类在子体系中到场新的行动,这类做法是毛病的。表面形式的意图是为子体系供应一个集中化和简化的沟通渠道,而不是向子体系到场新的行动,新的行动的增添应当经由历程修正原有子体系类或增添新的子体系类来完成,不能经由历程表面类来完成。

  • 笼统表面类的引入

    表面形式最大的瑕玷在于违犯了“开闭准绳”,当增添新的子体系或许移除子体系时须要修正表面类,能够经由历程引入笼统表面类在肯定水平上处置惩罚该题目,客户端针对笼统表面类举行编程。关于新的营业需求,不修正原有表面类,而对应增添一个新的细致表面类,由新的细致表面类来关联新的子体系对象,同时经由历程修正配置文件来到达不修正源代码并替换表面类的目的。

总结

  • 在表面形式中,外部与一个子体系的通讯必需经由历程一个一致的表面对象举行,为子体系中的一组接口供应一个一致的界面,表面形式定义了一个高层接口,这个接口使得这一子体系越发轻易运用。表面形式又称为门面形式,它是一种对象构造型形式。

  • 表面形式包含两个角色:表面角色是在客户端直接挪用的角色,在表面角色中能够晓得相干的(一个或许多个)子体系的功用和义务,它将一切从客户端发来的要求委派到响应的子体系去,传递给响应的子体系对象处置惩罚;在软件体系中能够同时有一个或许多个子体系角色,每一个子体系能够不是一个零丁的类,而是一个类的鸠合,它完成子体系的功用。

  • 表面形式要求一个子体系的外部与其内部的通讯经由历程一个一致的表面对象举行,表面类将客户端与子体系的内部庞杂性分离隔,使得客户端只须要与表面对象打交道,而不须要与子体系内部的许多对象打交道。

  • 表面形式重要长处在于对客户屏障子体系组件,减少了客户处置惩罚的对象数量并使得子体系运用起来越发轻易,它完成了子体系与客户之间的松耦合关联,并下降了大型软件体系中的编译依赖性,简化了体系在差别平台之间的移植历程;其瑕玷在于不能很好地限定客户运用子体系类,而且在不引入笼统表面类的状况下,增添新的子体系能够须要修正表面类或客户端的源代码,违犯了“开闭准绳”。

  • 表面形式实用状况包含:要为一个庞杂子体系供应一个简朴接口;客户顺序与多个子体系之间存在很大的依赖性;在条理化构造中,须要定义体系中每一层的进口,使得层与层之间不直接发生联络。

以上就是本篇文章的全部内容,更多请关注laravel框架入门教程。

相干文章引荐:

基于laravel5.2举行中间件源码的剖析

Laravel当地环境搭建:Homestead开辟环境的布置

相干课程引荐:

2017年最新的五个Laravel视频教程引荐

以上就是Laravel框架中表面形式的深切剖析的细致内容,更多请关注ki4网别的相干文章!

标签:laravel外观模式php