В чем преимущества ValueObject и DTO? Посмотрел кучу материалов про этот паттерн везде обьясняют суть а вот зачем он я так и не пойму ну допустим пусть сделаемclass DateRange { function __counstruct( $from, $to ) { . . . } function getValue($name) { if($name != "from" and $name != "to" ) { throw new \Exception(""); } return $this->{$name}; } ну параметр в функцию надо будет передавать не два а один. поведения то никакого нет второй вопрос про DTO тоже читал про него и понял что мой код return $this->render($view, array_map(function( $hit ) { return $hit->getVersionInfo()->getContenInfo(); }, $searchResults); в каком-то смысле я тоже редьюсю сложный обьект и передаю DTO во вьюшку верно? вижу смысл ValueObject и DTO только если идет разработка расширяемого приложения чтоб гарантировать что разработчик передаст в нужную функцию обьект в котором доступен необходимое свойство но вот внутри в тех частях логика которых фиксирована и не может меняться - вполне подходит массив ключ-значение некоторое время назад я заметил что мои контроллеры часто возвращают массив с 3мя ключами content, searchResults, facets и даже думал дифинировать класс для такой структуры данных но потом не стал - т.к. иногда нужен 4й ключ или даже 5й а если где-то не передан один из этих ключей - это сразу Exception и это правильно - система без них не может работать и еще 3й вопрос как реализовать на php типизированую коллекцию типа как в СИ чтоб каждый элемента массива был одного определенного инстанса? Всем Спасибо
ValueObject - это объект, который представляет значение и обладает свойствами неизменяемости. Он обеспечивает безопасное сравнение значений и гарантирует их неподдачу изменениям.
Преимущества ValueObject:
Гарантия неизменности значения.Удобство использования в качестве ключа в коллекциях.Улучшение читаемости кода и предотвращение ошибок из-за неправильного сравнения значений.
DTO (Data Transfer Object) - объект, который используется для передачи данных между различными слоями приложения. Он содержит только данные и методы доступа к ним, не содержащие бизнес-логику.
Преимущества DTO:
Упрощение передачи данных между компонентами приложения.Улучшение производительности за счет уменьшения числа передаваемых параметров.Улучшение читаемости кода.
В вашем примере с классом DateRange, использование ValueObject может быть полезным, чтобы гарантировать неизменность значений from и to. Это упростит сравнение и передачу объекта DateRange между различными компонентами приложения.
Что касается типизированной коллекции в PHP, вы можете использовать PHPDoc-комментарии для указания типа элементов в массиве. Например:
/** * @var MyClass[] */ $array = [];
Это поможет IDE и другим разработчикам понять, какие типы объектов ожидаются в коллекции.
ValueObject - это объект, который представляет значение и обладает свойствами неизменяемости. Он обеспечивает безопасное сравнение значений и гарантирует их неподдачу изменениям.
Преимущества ValueObject:
Гарантия неизменности значения.Удобство использования в качестве ключа в коллекциях.Улучшение читаемости кода и предотвращение ошибок из-за неправильного сравнения значений.DTO (Data Transfer Object) - объект, который используется для передачи данных между различными слоями приложения. Он содержит только данные и методы доступа к ним, не содержащие бизнес-логику.
Преимущества DTO:
Упрощение передачи данных между компонентами приложения.Улучшение производительности за счет уменьшения числа передаваемых параметров.Улучшение читаемости кода.В вашем примере с классом DateRange, использование ValueObject может быть полезным, чтобы гарантировать неизменность значений from и to. Это упростит сравнение и передачу объекта DateRange между различными компонентами приложения.
Что касается типизированной коллекции в PHP, вы можете использовать PHPDoc-комментарии для указания типа элементов в массиве. Например:
/*** @var MyClass[]
*/
$array = [];
Это поможет IDE и другим разработчикам понять, какие типы объектов ожидаются в коллекции.