-
Notifications
You must be signed in to change notification settings - Fork 2
Handler业务处理入口
simon edited this page Jun 19, 2019
·
5 revisions
Handler处理器的出现是为了解决部分情况业务逻辑冗余以及Controller或其它主处理中不可分离的业务逻辑。
我们采用Handler+Task来分离原有架构中的Service层
Handler就是核心业务逻辑的处理
Handler是承载所有业务逻辑的入口。 虽然是承载重业务但并不表示Handler是冗余的,一个Handler仍然只是处处理一个用例,即:一个独立的功能
- 每个Handler只处理一个用例
- 一定不可调用
Request
。我们提供了数据供给器(DataProvider
)来传递给Handler需要处理的参数 - 可以调用Task(分片共用的业务逻辑),Repository,Model
- 只能被高层调用,如Controller,Command,Job,Listener,Event
- 不允许继承,公用的应该调用Task
/**
* Class CodeHandler
* @package CrCms\Passport\Handlers
*/
class CodeHandler extends AbstractHandler
{
/**
* @param DataProviderContract $provider
* @return string
*/
public function handle(DataProviderContract $provider): string
{
$object = $provider->get('object');
$type = $provider->get('type');
try {
$user = $this->app->make(UserRepository::class)->byMobileOrEmailOrFail($object);
} catch (ResourceNotFoundException $exception) {
throw ValidationException::withMessages(['user' => $exception->getMessage()]);
}
$code = $this->app->make(CodeService::class)->generate([$object]);
(new SendCodeTask)->handle($object, $user, $code, $type);
return $code;
}
}