永发信息网

PHP中service层怎么设计兼顾优雅和方便

答案:2  悬赏:0  手机版
解决时间 2021-02-06 03:42
PHP中service层怎么设计兼顾优雅和方便
最佳答案
这两种其实都不好,因为不能直接从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请求
全部回答
任务占坑
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
床头朝哪好?有什么寓意么?
二年级暑假数学作业,正方形都有四个角,剪去
远成快运(开通大厦西南)怎么去啊,我要去那办
被誉为“第二次绿色革命”的籼型杂交水稻的培
成都西部医药经营公司广元分公司在什么地方啊
优速快递嘉峪关分公司地址有知道的么?有点事
实意能叫枯木发芽的前一句是什么?
韵达快递(紫轩分部)地址有知道的么?有点事想
艾菲怎么去啊,有知道地址的么
求:一直角三角形ABC,直角边AB长15m,AB与斜边
去日本是否可以带辣酱
还珠格格里乾隆出游的是第几集?
win10系统需要安装360吗
顺丰速运(开通大厦西南)地址在什么地方,我要
初三孩子成绩中游,暑期有必要补课吗?
推荐资讯
兰里(闻宅步行街店)地址在哪,我要去那里办事
春节海鲜价格必涨吗?
解方程 (1)7y(y一1)=3一3y (2)3分之2 y
一根长48厘米的铁丝正好做成了一个长5厘米,宽
【246810打一成语】...一成语23456879打一成
土地买卖合同纠纷中,可以要求侵权之诉吗?有
诸暨市三毛汽车维修怎么去啊,我要去那办事
基态吸收能量但还不足以到激发态,电子会怎样
成都保健按摩地址有知道的么?有点事想过去
泾阳西北旅社地址在哪,我要去那里办事
离婚后孩子的抚养权想轮流抚养,请问在法律上
怎么在搜狗拼音上打非主流符号?要全一点 最
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?