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); // ...}
우아함과 편리함을 모두 갖춘 PHP 서비스 레이어를 디자인하는 방법은 무엇입니까? -PHP 중국어 웹사이트 Q&A - PHP에서 서비스 레이어를 우아하고 편리하게 디자인하는 방법은 무엇입니까? -PHP 중국어 홈페이지 Q&A
꼭 보고 배워보세요.
这两种其实都不好,因为不能直接从Service的接口(或函数签名)看出它需要的参数。
对于参数很多的方法,可以用对象表示参数,控制器根据Request封装得到对象(对象也可以提供一个fromRequest方法)再传给Service。
补充个例子,UserService的getList可以这样定义:
看函数签名就可以知道第一个参数是UserCriteria,后面的$limit和$offset是分页用的,也可以再封装成一个类,但是没必要。
其中的UserCriteria就是查找和筛选用户的条件:
在控制器调用:
好处:
明确的类型(IDE还能自动补全)
隔离HTTP请求