Как использовать DTO в этом случае?

У меня есть несколько методов в моем контроллере, и теперь это выглядит так:

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 и другие фильтры? Это хороший подход?

1

Решение

Если бы вы только рассматривали возможность использования двух параметров, я бы посчитал это шаблоном запроса по примеру, и это было бы вполне приемлемо. Потому что вы рассматриваете возможность добавления таких вещей, как PageNumber & PageSize, я бы сказал, что у вас все получилось, и вы должны рассмотреть отдельный ItemOuery DTO, в котором есть нужные параметры.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]