PHP中service层怎么设计兼顾优雅和方便
答案:2 悬赏:0 手机版
解决时间 2021-02-06 03:42
- 提问者网友:蓝莓格格巫
- 2021-02-06 00:11
PHP中service层怎么设计兼顾优雅和方便
最佳答案
- 五星知识达人网友:愁杀梦里人
- 2021-02-06 01:45
这两种其实都不好,因为不能直接从Service的接口(或函数签名)看出它需要的参数。
对于参数很多的方法,可以用对象表示参数,控制器根据Request封装得到对象(对象也可以提供一个fromRequest方法)再传给Service。
补充个例子,UserService的getList可以这样定义:
public function getList(UserCriteria criteria, $limit = 10, $offset = 0) {
...
}
看函数签名就可以知道第一个参数是UserCriteria,后面的$limit和$offset是分页用的,也可以再封装成一个类,但是没必要。
其中的UserCriteria就是查找和筛选用户的条件:
class UserCriteria
{
public $name;
public $age;
// ... 很多其他参数
public static function fromRequest(Request $req)
{
$instance = new static;
$instance->name = $req->input('name');
// ... 很多其他参数
return $instance;
}
}
在控制器调用:
public function index(Request $req)
{
$criteria = UserCriteria::fromRequest($req);
$userList = $this->userService->getList($criteria, 10);
// ...
}
好处:
明确的类型(IDE还能自动补全)
隔离HTTP请求
对于参数很多的方法,可以用对象表示参数,控制器根据Request封装得到对象(对象也可以提供一个fromRequest方法)再传给Service。
补充个例子,UserService的getList可以这样定义:
public function getList(UserCriteria criteria, $limit = 10, $offset = 0) {
...
}
看函数签名就可以知道第一个参数是UserCriteria,后面的$limit和$offset是分页用的,也可以再封装成一个类,但是没必要。
其中的UserCriteria就是查找和筛选用户的条件:
class UserCriteria
{
public $name;
public $age;
// ... 很多其他参数
public static function fromRequest(Request $req)
{
$instance = new static;
$instance->name = $req->input('name');
// ... 很多其他参数
return $instance;
}
}
在控制器调用:
public function index(Request $req)
{
$criteria = UserCriteria::fromRequest($req);
$userList = $this->userService->getList($criteria, 10);
// ...
}
好处:
明确的类型(IDE还能自动补全)
隔离HTTP请求
全部回答
- 1楼网友:刀戟声无边
- 2021-02-06 02:55
任务占坑
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯