PHP中service层怎么设计兼顾优雅和方便?
phpcn_u699
phpcn_u699 2017-02-20 13:51:14
0
2
1421

比如我的列表页,因为查询参数比较多,查询条件也多,排序方式也比较多。
之前是把http的request查询参数通过数组传到service 但是发现很多不方便,比如我上传 比如我列表搜索页。
直接在service里调用request,这样感觉方便的多。

比如之前这样的:

$userList = $this->userService->getList($request->input(), 10);

现在改成这样

$userList = $this->userService->getList(10);


phpcn_u699
phpcn_u699

membalas semua(2)
数据分析师

Bagaimana untuk mereka bentuk lapisan perkhidmatan dalam PHP dengan keanggunan dan kemudahan? -Tapak web PHP Cina Soal Jawab-Bagaimana untuk mereka bentuk lapisan perkhidmatan dalam PHP supaya elegan dan mudah? -Soal Jawab laman web PHP Cina

Sila tonton dan pelajari.

巴扎黑

这两种其实都不好,因为不能直接从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请求


Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!