lumen_rule_service.md
2.18 KB
LUMEN+API Service规范
1. Service规范
在应用中,除了数据操作的业务交给Model实现,额外的业务全部交给Service进行封装实现
-
Service一般实现包括以下几个方面:
- 封装用户的权限验证
- 封装一些基本操作,如通过curl实现HttpGet,HttpPost、通过Cache实现CacheManager、通过Log实现LogService等。
- 封装了与其它系统交互的细节,如CRMService, PortalService, SCService等。
一般简单的工具类,文件存放在app\Libraray中。
其它具体的提供服务类,文件存放在app\Service中。
服务不依赖于上层Controller/Model类,按照约定,服务可以在不同项目中复用。
在应用中,服务的日志需要独立。
服务被Controller/Model对象所调用,实现业务逻辑,服务一般在这些类中配置成依赖注入的。或者通过Factory方式,生成服务对象。
/**
* weixin服务工厂类
* Class WeixinServiceFactory
* @package App\Services\WeixinFunc
*/
class WeixinServiceFactory
{
/**
* @return WeixinMPTicketService
*/
public function mpTicketService() {
return App::make(WeixinMPTicketService::class);
}
/**
* @return WeixinMPOpenTPService
*/
public function mpOpenTpService() {
return App::make(WeixinMPOpenTPService::class);
}
/**
* @return WeixinQyCorpService
*/
public function qyCorpService() {
return App::make(WeixinQyCorpService::class);
}
}
// 在具体实现的Controller中
public function qyAgentMenuCreate($suiteName) {
$corpId = $this->requestHandler->input('corpId');
$this->wxServiceFactory->qyCorpService()->wxQySetAgentMenu(
$agentInstance->getMyAgentId(),
$this->getCorpAccessToken($suiteName,$corpId),
$this->requestHandler->input('menus')
);
}
- 对于依赖注入,有时创建服务时,需要根据Request参数不同,而创建不同的服务实例,那么,可以在bootstrap/app.php中去动态绑定依赖注入时参数的依赖
/**
* CorpInstance注入
*/
$reqCorpId = $request->input($reqCorp);
$app->bind(\App\Services\CorpInstance::class,function($app) use($reqCorpId){
if(empty($reqCorpId)) {
$reqCorpId = 'UNKNOWN_CORP';
}
$corpIns = new \App\Services\CorpInstance(reqCorpId);
return $corpIns;
});
?