我有一些用于获取对象集合的命令。
<?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;
}
}
但是我需要分页显示结果。
现在,我将分页作为处理方法的参数,如下所示,但我觉得该处理只能有一个参数-Command。
<?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;
}
}
问题:
该如何纠正?我应该在命令中放置分页参数吗?
答案 0 :(得分:2)
您应该在GetCardsByNetworkId构造中询问itemsPerPage和page参数。
在您甚至将GetCardsByNetworkId传递给commandBus之前,这将阻止您的Command处理分页验证(itemPerPage> 0,页面> = 1,...)并验证输入。
您将看到类似这样的内容:
<?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)。