метод run. Сначала этот метод имел несколко аргументов, но потом их стало много и я заменил их на dto.
private SomeDto $dto;
public run(SomeDto $dto) {
$this->dto = $dto;
... work
}
и дальше все приватные методы обращаются к $this->dto...
С одной стороны так не надо дублировать поля SomeDto, а с другой создаю сильную связанность.
Как быть в данном случае?
Беглым взглядом могу сказать, что тут пригодится один из принципов SOLID
отлично, а можно больше деталей?)
На позицию эксперта не претендую, однако на данный момент у тебя уже используется один из методов SOLID — инверсия зависимостей, что уже хорошо. Единственное ты можешь "прокачать" его использование. Сделать это можно, создав интерфейс с методом run(), а затем класс Action расширить от этого интерфейса: class Action implements [имя_интерфейса].
ясно, спасибо. В данном случае это излишне. Меня смутило, что идет много обращений к $this->dto, но по сути этот dto написан специально для этого класса и больше нигде использоваться не будет
зачем здесь: $this->dto =
другие приватные методы его юзают
а кто мешает разделить дто в конструкторе? public run(SomeDto $dto) { $this->value1 = $dto->value1; ... work }
другие приватные методы должны его получить как параметр функции
да, сначала тоже об этом подумал. Но вопрос зачем дублировать все что уже написано в dto
чем плоха такая реализация?
по сути это так же как если бы приватный метод обращался к какому-то свойству класса через $this
как минимум когда у тебя метод run будет выглядить: public function run(Dto $dto): mixed { $this->dto = $dto; $this->method1(); $this->method2(); $this->method3(); } трудно читать код и не понятно от чего зависит метод класса, для меня следующий код более понятен для восприятия public function run(Dto $dto): mixed { $this->method1($dto); $this->method2($dto); $this->method3($dto); } также при таком способе может и методы не придется делать приватными
согласен полностью, спасибо!
Обсуждают сегодня