资讯专栏INFORMATION COLUMN

Yii源码解读-服务定位器(Service Locator)

moven_j / 2189人阅读

摘要:的目的也是解耦,并且非常适合基于服务和组件的应用。一个类可以在运行时,有针对性地增减替换所要用到的服务,从而得到一定程度的优化。这两个数组均是以服务或组件的为键的数组。用于保存这些组件或服务的定义。这个定义可以是配置数组对象类名参考

SL的目的也是解耦,并且非常适合基于服务和组件的应用。

Service Locator充当了一个运行时的链接器的角色,可以在运行时动态地修改一个类所要选用的服务, 而不必对类作任何的修改。

一个类可以在运行时,有针对性地增减、替换所要用到的服务,从而得到一定程度的优化。

实现服务提供方、服务使用方完全的解耦,便于独立测试和代码跨框架复用。

基本功能

Yii中的SL由yiidiServiceLocator实现

class ServiceLocator extends Component{
    // 用于缓存服务、组件等的实例
    private $_components = [];
    
    // 保存服务和组件的定义,通常为配置数组,可以用来创建具体的实例
    private $_definitions = [];
    
    // 重载了getter, 使得访问服务和组件与访问类的属性一样。
    // 保留了原来Component的getter所具有的功能
    public function __get($name){}
    
    // 增加了对是否具有某个服务和组件的判断。
    public function __isset($name){}
    
    public function has($id, $checkInstance = false){
        return $checkInstance ? isset($this->components[$id]) : isset($this->_definitions[$id]);
    }
    
    public function get($id, $throwException = true){}
    
    public function set($id, $definition){}
    
    // 删除一个服务或组件
    public function clear($id){
        unset($this->_definitions[$id], $this->_components[$id]);
    }
    
    public function getComponents($returnDefinitions = true){}
    
    // 批量注册
    public function setComponents($components)
}
数据结构

SL维护了两个数组: $_components & $_definitions。这两个数组均是以服务或组件的ID为键的数组。

SL提供了注册服务和组件的方法。

$_components用于缓存SL中的组件或服务的实例,为可读写的属性。

$_definitions用于保存这些组件或服务的定义。这个定义可以是:

配置数组

PHP callable

对象

类名: is_callable($definition, true) == true

参考

http://www.digpage.com/service_locator.html

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21465.html

相关文章

  • Yii源码解读-依赖注入(容器)

    摘要:在中使用解耦,有两种注入方式构造函数注入属性注入。对象的实例化解析依赖信息该方法实质上就是通过的反射机制,通过类的构造函数的参数分析他所依赖的单元。 有关概念 依赖倒置原则(Dependence Inversion Principle, DIP) 传统软件设计中,上层代码依赖于下层代码,当下层出现变动时,上层也要相应变化。 DIP的核心思想是:上层定义接口,下层实现这个接口,从而使的下...

    Prasanta 评论0 收藏0
  • Swoft 源码解读

    摘要:官网源码解读号外号外欢迎大家我们开发组定了一个就线下聚一次的小目标里面的框架算是非常重的了这里的重先不具体到性能层面主要是框架的设计思想和框架集成的服务让框架可以既可以快速解决很多问题又可以轻松扩展中的框架有在应该无出其右了这次解读的源码 官网: https://www.swoft.org/源码解读: http://naotu.baidu.com/file/8... 号外号外, 欢迎大...

    weij 评论0 收藏0
  • Yii2中的依赖注入

    摘要:构造器注入实现特定参数的构造函数,在新建对象时传入所依赖类型的对象。 基本概念 1.依赖倒置(反转)原则(DIP):一种软件架构设计的原则(抽象概念,是一种思想)在面向对象编程领域中,依赖反转原则(Dependency inversion principle,DIP)是指一种特定的解耦(传统的依赖关系创建在高层次上,而具体的策略设置则应用在低层次的模块上)形式,使得高层次的模块不依赖于...

    harriszh 评论0 收藏0
  • Yii源码解读-环境&配置

    摘要:环境需要了解一下一个纯粹的与本地环境密切相关的配置项。对于配置项以数组进行组织。数组元素表示将要创建的对象的完整类名。数组元素表示指定为属性的初始值为。数组元素表示将绑定到对象的事件中。对于形式配置项,视配置值为一个事件,绑定到上。 环境 需要了解一下cookieValidationKey:一个纯粹的、与本地环境密切相关的配置项。 但是,在有些情况下,cookieValidationK...

    cgh1999520 评论0 收藏0
  • Yii源码解读 - 事件

    摘要:事件的绑定和解除对事件进行绑定和解绑。使用全局函数作为来进行绑定使用对象的成员函数来进行绑定使用类的静态成员函数进行绑定使用匿名函数上面的数组是用来维护事件数组。事件的级别类级别事件类级别事件用于响应所有类实例的事件。 Yii基础 事件 event 使用事件,可以在特定的时点,触发执行预先设定的一段代码,事件既是代码解耦的一种方式,也是设计业务流程的一种模式。 事件的相关要素 这是一...

    AaronYuan 评论0 收藏0

发表评论

0条评论

moven_j

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<