服务层调用

服务是一个公用性的底层,为各个应用系统提供底层服务,引用fecshop的服务说明

原则约定

各个“应用系统”,譬如frontend,backend,api,wechat,是一个独立的文件结构 ,他们都有独立的模块,里面有controller(控制层) ,但是没有model层,在原则上约定,各个“应用系统”不能直接访问model, 只能访问Service(服务),来进行数据的获取和处理工作,然后由service层 访问model层进行数据的获取处理等工作。

功能粒度

首先,对于model层的函数粒度,对应的是数据的操作,譬如更改某一行数据,添加一行数据等。

对于service层的函数粒度,一般是我们语言描述需求的最小粒度,譬如:把一个产品加入购物车, 删除购物车的某个产品,调出某个分类下的产品,登录用户,计算产品的最终价格,等等,对于上面的这些最小的 语言描述粒度,会在服务层实现,然后直接访问该服务中的方法即可。

使用方法

common\config\main.php 中的services(服务层) 添加test后如下

    'services' => [
        'test' => [
            'class' => 'common\servers\Test',
            // 子服务
            'childService' => [
                'test' => [
                    'class' => 'common\servers\test\Test',
                ],
            ],
        ],
    ]

查看common\servers\Test,注意服务层的类都要继承 jianyan\basics\services\Service

<?php
namespace common\servers;

use jianyan\basics\services\Service;

/**
 * Class Test
 * @package common\servers
 */
class Test extends Service
{
   public function index()
   {
       var_dump("调用服务成功1");
   }
}

访问test服务

    Yii::$service->test->index();

访问test的子服务

    Yii::$service->test->test->index();

service实现原理 点击跳转


上次更新:2018-07-12