-
Notifications
You must be signed in to change notification settings - Fork 2
Task业务处理
simon edited this page Dec 28, 2018
·
3 revisions
Service模式在小型单应用下会非常棒,但随意应用不断加大,Service之间的相互调用就会越来越多,相对的冗余就会越来越多。
所以我们使用Handler+Task模式来分离庞大的Service服务,使用系统代码可用度增加,冗余和重复代码减少。
-
Task
也是属于业务逻辑
的一部分,非工具类的脚手架 - 一个
Task
只是承载一个单一并且是可复用
的业务逻辑,即一个独立的任务
- 可以调用
Repository
,Model
-
只能被
Handler
,Job
,Event
,Listener
,Command
调用 -
一定不可被
Controller
,Model
调用 - 多个
Task
之间一定不可相互调用 -
Swoole Task
也是基于此类规范 -
Task
不允许被继承
// 主业务逻辑处理器
use CrCms\Foundation\App\Handlers\AbstractHandler;
class Handler extension AbstractHandler
{
/**
* @param DataProviderContract $provider
* @return array
*/
public function handle(DataProviderContract $provider): array
{
$task = $this->app->make(ShareTask::class);
return $task->handle(...$provider->all());
}
}
use CrCms\Foundation\App\Tasks\AbstractTask;
class ShareTask extension AbstractTask
{
/**
* @param mixed ...$params
* @return array
*/
public function handle(...$params): array
{
//这里是单一业务逻辑处理
return $params;
}
}
必须基于Swoole运行环境
use CrCms\Foundation\App\Tasks\AbstractTask;
use CrCms\Foundation\Swoole\Server\Contracts;
class SwooleTask extension AbstractTask implements TaskContract
{
/**
* @param mixed ...$params
* @return array
*/
public function handle(...$params): array
{
//这里是单一业务逻辑处理
return $params;
}
/**
* @param mixed $data
* @return mixed
*/
public function finish($data)
{
//Task处理完成后,出发的finish逻辑
}
}
//Task的调度
use CrCms\Foundation\Swoole\Server\Tasks\Dispatcher;
Dispatcher::dispatch(new SwooleTask, ['foo'=>'bar']);