首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命令模式+分页

命令模式+分页
EN

Stack Overflow用户
提问于 2018-07-31 07:52:06
回答 1查看 379关注 0票数 0

我有一些命令,用于获取一些对象的集合。

代码语言:javascript
复制
<?php

declare(strict_types=1);

namespace App\Domain\Query;

class GetCardsByNetworkId
{
    /**
     * @var int
     */
    private $network_id;

    public function __construct(int $network_id)
    {
        $this->network_id = $network_id;
    }

    public function network_id(): int
    {
        return $this->network_id;
    }
}

但我需要对结果进行分页。

现在,我将分页作为参数来处理方法,如下所示,但是我觉得句柄应该只有一个参数-命令。

代码语言:javascript
复制
<?php

declare(strict_types=1);

namespace App\Domain\Query;

use App\Projection\Card\CardFinder;

class GetCardsByNetworkIdHandler
{
    /**
     * @var CardFinder
     */
    private $cardFinder;

    public function __construct(CardFinder $cardFinder)
    {
        $this->cardFinder = $cardFinder;
    }

    public function handle(GetCardsByNetworkId $query, int $itemsPerPage, int $page)
    {
        $card = $this->cardFinder->findAllForNetworkId($query->network_id(), $itemsPerPage, $page);

        return $card;
    }
}

问题:

怎样才能做到正确呢?我该按我的命令安排分页平行线吗?

EN

回答 1

Stack Overflow用户

发布于 2018-07-31 13:05:27

您应该在您的itemsPerPage构造中请求GetCardsByNetworkId和页面参数。

它将阻止命令处理分页验证(itemPerPage > 0,页面>= 1,.)并在将GetCardsByNetworkId传递给commandBus之前验证输入。

你会得到这样的东西:

代码语言:javascript
复制
<?php

declare(strict_types=1);

namespace App\Domain\Query;

class GetCardsByNetworkId
{
    /**
     * @var int
     */
    private $network_id;
    /**
     * @var int
     */
    private $itemsPerPage;
    /**
     * @var int
     */
    private $page;


    public function __construct(
        int $network_id,
        int $itemsPerPage,
        int $page
    ) {
        $this->network_id = $network_id;
        IsGreaterThan::validate(0, $itemsPerPage);
        IsGreaterThan::validate(0, $page);
        $this->itemsPerPage = $itemsPerPage;
        $this->page = $page;
    }

    public function network_id(): int
    {
        return $this->network_id;
    }

    public function getItemsPerPage(): int
    {
        return $this->itemPerPage;
    }

    public function getPage(): int
    {
        return $this->page;
    }
}

其中,IsGreaterThan类是您的断言实现,如果不满足,它应该抛出异常(即:\InvalidArgument)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51608144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档