我有一些命令,用于获取一些对象的集合。
<?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;
}
}但我需要对结果进行分页。
现在,我将分页作为参数来处理方法,如下所示,但是我觉得句柄应该只有一个参数-命令。
<?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;
}
}问题:
怎样才能做到正确呢?我该按我的命令安排分页平行线吗?
发布于 2018-07-31 13:05:27
您应该在您的itemsPerPage构造中请求GetCardsByNetworkId和页面参数。
它将阻止命令处理分页验证(itemPerPage > 0,页面>= 1,.)并在将GetCardsByNetworkId传递给commandBus之前验证输入。
你会得到这样的东西:
<?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)。
https://stackoverflow.com/questions/51608144
复制相似问题