Комментарии 5
new class(new UnnecessaryDomainClass())
А зачем, если анонимный класс можно сделать таким ?
$dataForBladeTemplate = new class() extends DataForBladeTemplate {
public string $fieldOne;
public string $fieldTwo;
public string $fieldThree;
public function __construct() {}
};
Например, что если в подменяемом классе изменится состав полей?
С тем же успехом в blade шаблоне может измениться список используемых методов. Если есть уверенность что "точно нет", то лучше переопределить эти методы в анонимном классе, а не тащить рефлексию туда, где она не нужна.
А зачем, если анонимный класс можно сделать таким ?
Согласен, совсем забыл, что в PHP можно менять сигнатуру конструктора и приватных методов в классах-наследниках без последствий.
С тем же успехом в blade шаблоне может измениться список используемых методов. Если есть уверенность что "точно нет", то лучше переопределить эти методы в анонимном классе, а не тащить рефлексию туда, где она не нужна.
Изменение списка используемых методов не повлияет на работу тестового двойника, он же их наследует. Может измениться набор полей, но его легко отредактировать в сервисе-клиенте и всё, больше нигде его менять не надо, ничего не надо редактировать в коде «того микросервиса». А рефлексия в данном случае помогает решить возможную проблему с приватными полями в классе-родителе.
А так, снова согласен, сам люблю минимализм, и с удовольствием обошёлся бы анонимным классом.
Может измениться набор полей, но его легко отредактировать
Я имел ввиду, что методы так же можно легко отредактировать. Более того, можно в конструктор сразу передать ваш $request
(ну или только поля из него) и в методах данные брать напрямую из него. Тогда и поля не надо переопределять.
А вообще сюда прям просится DataForBladeTemplateInterface
с необходимыми для шаблона методами 😉
Mock-объект в рабочем коде, или как тестовый двойник помог решить проблему излишне связанного кода