В чем преимущества 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 типизированую коллекцию типа как в СИ
чтоб каждый элемента массива был одного определенного инстанса?
Всем Спасибо

21 Авг 2019 в 07:02
240 +1
1
Ответы
1

ValueObject - это объект, который представляет значение и обладает свойствами неизменяемости. Он обеспечивает безопасное сравнение значений и гарантирует их неподдачу изменениям.

Преимущества ValueObject:

Гарантия неизменности значения.Удобство использования в качестве ключа в коллекциях.Улучшение читаемости кода и предотвращение ошибок из-за неправильного сравнения значений.

DTO (Data Transfer Object) - объект, который используется для передачи данных между различными слоями приложения. Он содержит только данные и методы доступа к ним, не содержащие бизнес-логику.

Преимущества DTO:

Упрощение передачи данных между компонентами приложения.Улучшение производительности за счет уменьшения числа передаваемых параметров.Улучшение читаемости кода.

В вашем примере с классом DateRange, использование ValueObject может быть полезным, чтобы гарантировать неизменность значений from и to. Это упростит сравнение и передачу объекта DateRange между различными компонентами приложения.

Что касается типизированной коллекции в PHP, вы можете использовать PHPDoc-комментарии для указания типа элементов в массиве. Например:

/**
* @var MyClass[]
*/
$array = [];

Это поможет IDE и другим разработчикам понять, какие типы объектов ожидаются в коллекции.

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир