我的控制器中有很多方法,现在它看起来像这样:
class ItemController
{
public function getItems(Request $request)
{
return $this->itemService->getItems($this->getUser(), $request->get('category_id'));
}
public function getItem(int $id, Request $request)
{
return $this->itemService->getItem($this->getUser(), $id, $request->get('category_id'));
}
public function patchItem(ItemDTO $item, Request $request)
{
return $this->itemService->patchItem($this->getUser(), $item, $request->get('category_id'));
}
}
我想避免将大量参数传输到远程接口,并将categoryId
,id
和user
添加到我的ItemDTO。如果我的ItemDTO中有很多字段,这是不错的方法,但我只用了两个?像这样:
public function getItem(int $id, Request $request)
{
$itemDTO = new ItemDTO($this->getUser(), $id, $request->get('category_id')); //here $title and others is empty
return $this->itemService->getItem($itemDTO);
}
我的DTO是这样的:
class ItemDTO
{
final public $user;
final public $id;
final public $categoryId;
final public $title;
//...
public function __construct($user = null, $id = null, $categoryId = null, $title = null, ...)
{
//assign variables
}
}
也许每个方法都需要单独的DTO?此外,DTO可以包含$pageNumber
,$pageSize
和其他过滤条件等字段吗?这是好方法吗?
答案 0 :(得分:0)
如果您只是考虑使用这两个参数,我会认为它是一个按示例模式的查询,这是相当可以接受的。因为您正在考虑添加像PageNumber&amp ;; PageSize,我会说你已经把它搞砸了,你现在应该考虑一个单独的ItemQuery DTO,它有你需要的参数。