service层的作用就是把这些需要多个model参与的复杂业务逻辑单独封装出来,这些model之间不再发生直接的依赖,而是在service层内协同完成逻辑。service层的第一个目的其实就是对model层进行解耦,从而达到低耦合高内聚的目的。
具体实现
定义服务层基类Service.php ,位置/services/Service.php
<?php
namespace api\services;
use yii\base\BaseObject;
use yii\base\InvalidConfigException;
class Service extends BaseObject
{
public $childService;
public $childServiceList;
public function getChildService($childServiceName)
{
if (!isset($this->childServiceList[$childServiceName])) {
$childService = $this->childService;
if (isset($childService[$childServiceName])) {
$service = $childService[$childServiceName];
$this->childServiceList[$childServiceName] = \Yii::createObject($service);
} else {
throw new InvalidConfigException(
'Child Service [' . $childServiceName . '] is not find in ' .
get_called_class() . ', you must config it! '
);
}
}
return $this->childServiceList[$childServiceName];
}
public function __get($attr)
{
return $this->getChildService($attr);
}
}
增加服务层子类,这里以订单服务为例,创建Order.php ,位置/services/Order.php
<?php
namespace api\services;
class Order extends Service
{
public function test(){
return 'test Service[order] success';
}
}
项目主配置文件/config/main.php ,增加components 节点的配置
'components' => [
'service' => require('service.php'),
],
增加/config/service.php 文件,内容如下
<?php
return [
'class' => 'api\services\Service',
'childService' => [
'order' => 'api\services\Order',
//其他服务子类...
],
];
调用服务方法
Yii::$app->service->order->test();
|