Immutable

Yoskaldyr

Новичок
Партнер клуба
Какие используете либы для read-only и immutable классов?

Все существующие реализации что нашел сильно громоздкие и тормознутые (при небольших объектах и небольшом количестве get конечно работают норм, но если что-то с активным вычислением с кучей get, то производительность падает в разы)

P.S. лично я тупо использую @property-read пхпдок комменты, понятно что никакого отношения к настоящему immutable не имеет отношения, но хотя бы сторм ругается при попытке изменения.
 

fixxxer

К.О.
Партнер клуба
Это надо решать на уровне языка (public final или public readonly).

Пока все плохо - пишу код вида

PHP:
class ValueObject
{
     /** @var string */
     private $foo;

     public function foo(): string
     {
          return $this->foo;
     }
}
 

Yoskaldyr

Новичок
Партнер клуба
А нет случайно каких-то бинарных расширений для чего-то подобного? Ну типа юзать какую-то обертку, но если вдруг проблемы или по памяти или производительности чтобы легко переключиться на более производительный вариант
 

fixxxer

К.О.
Партнер клуба
Да какая-то надуманная проблема, если честно.

Написал конструктор с аргументами, тыкнул initialize fields, тыкнул generate getters, все.
 

Вурдалак

I'd like to model your domain
Да какая-то надуманная проблема, если честно.

Написал конструктор с аргументами, тыкнул initialize fields, тыкнул generate getters, все.
Вот мне нужно добавить 3-4 события, и я начинаю как робот повторять одни и те же действия. Потом не дай бог понадобится добавить переменную в список параметров конструктора не в середину и чтобы не сойти с ума, приходится менять порядок в коде конструктора (присваивание), потом в списке переменных класса. Потом перевести курсор между нужными гетерами и только там сгенерировать новый.

Мне кажется, 80% моего написания кода уходит вот на этот лютый треш.

Я бы многое отдал за final/read-only properties.
 

fixxxer

К.О.
Партнер клуба
Да, есть такое. Я еще часто пишу на typescript-е, когда возвращаюсь на PHP, это, конечно, особенно все бесит.

Но всякие варианты с __get-магией все равно намного хуже. Лучше уж так, пока на уровне языка не решат.

Ну, и еще меня сильно удивляют люди, которые это все вообще ручками делают. Але, phpstorm-то зачем покупали?
 
Сверху