06
Дек
2017

Как правильно использовать 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) в методы сервиса и сделать что-то вроде такого:

 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
    }
}

Это нормальных подход, что в ItemDTO останутся пустыми поля title все остальные что следуют за ним? Так же еще вопрос, мне понадобятся фильтры типа pageSize, pageNumber и т.д, стоит ли их размещать в DTO, либо сделать отдельный класс ItemFilter?

Источник: https://ru.stackoverflow.com/questions/754614/%D0%9A%D0%B0%D0%BA-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-dto

Тебе может это понравится...

Добавить комментарий