Yii2 核心抽象

代码写在哪里,最好的范例就是看框架本身,熟悉相关的概念(Yii2 基础抽象图如下)

原本基类是Object,  2.0.14 之后改为BaseObject ,它实现了属性的抽象

下面一层是组件 component 多了事件event 和 行为behaviour ,因为behaviour会注入属性,所以组件的属性也重写了。

再下层的抽象是 Service Locator(服务定位器)Container(容器)


服务器定位器我们上面写的新增Yii2 sevice层就是服务定位器的实现,类同全局注册表一样,Service 可以配置数组的形态存在如新增Yii2 sevice层中的service文件夹里的 Application.php就是。


另一边,Container 是 DI 设计模式的核心实现,主要就是容器。


Module (模块) 是业务逻辑的基本组织单位,Module 自己就是一个 ServiceLocator。因为它是一个组织者,也是一个容器,Module 控制着 Controller 和 View 的生命周期,此外 Module 还可以跟自己嵌套。所以,Module 就是 Yii 框架里,最核心的容器抽象了。帮助更有效的组织代码。


Application (Yii::$app) 是一种特殊的 Module,它是一个应用,整个系统启动的第一个容器。所以它是 Module 的子类。同时也是一个服务定位器,而这些服务通常会在config文件夹里配置在组件数组,称为应用组件通过 Yii::$app->组件名来调用

评论区
登陆 后评论!