Павел
Всеравно можно дернуть сеттер напрямую
Ну в случае с ричом, там в методе все что нужно передать, и никакой Петя не забудет это.
Павел
А проверять инварианты в каждом сеттере?
Ну обычно это просто не сеттеры, а какая то операция бизнесовая. В общем заивист от домена.
Павел
Мы же чаще круд пишем, и на все это можно забить
Юра
Типо каждый сеттер дёргает check и ставит флаг
Юра
При флаше проверяем флаг
Павел
Зачем такие сложности?
Юра
Чтобы анемик модели делать )
Юра
Я не знаю. Я вообще всегда думал что энтити должна проверяться валидатором перед сохранением и вопрос невалидности энтити а процессе дерганья сеттеров как-то по фигу вообще
Юра
И можно легко зафорсить проверку что энтити провалидирована перед сохранением
Павел
Я не знаю. Я вообще всегда думал что энтити должна проверяться валидатором перед сохранением и вопрос невалидности энтити а процессе дерганья сеттеров как-то по фигу вообще
Ну это один из вариантов, но опять таки - кто то может забыть дернуть, для этого линтер. Бизнесовая валидация может быть сложнее, чем то что можно запихать в сущность через assert, т.е. валидатор не покроет
Павел
Поидее куча проектов в сети и все на разных архитектурах. И Всё работает и приносит деньги. Просто что-то чуть более удобнее поддерживать и развивать, что-то менее. Где то лучше было одно, где то другое, а где то вообще пофиг.
Павел
А еще пересусложненный код на ровном месте хуже лапши. Но это имхо
Gleb
Поидее куча проектов в сети и все на разных архитектурах. И Всё работает и приносит деньги. Просто что-то чуть более удобнее поддерживать и развивать, что-то менее. Где то лучше было одно, где то другое, а где то вообще пофиг.
У меня на прошлой работе была проблема в том, что с 80% кода который мы писали потом никто не сталкивался и туда не надо было лазить. (раньше менялась концепция целиком или сайт подходил к "редизайну" в рамках которого половина сайта выкидывалась). В итоге была проблема узнать - норм решение, или ты прям откровенно наговнокодил. Но все работало. А вообще сколько сталкивался ещё много вопроса вкусов к тому или иному подходу.
Gleb
А еще пересусложненный код на ровном месте хуже лапши. Но это имхо
Меня в одном месте учили писать код типа как Simple English. Т.е. писать код, который будет понятен слабоквалифицированному сотруднику. Я вроде и понимаю плюсы этого подхода, но вот это мне как раз казалось переусложнением кода, он от этого разбухал.
Юра
Но если делаешь simple приходит строгий дядя Doebal Dmitrij Davidovih
Юра
И понеслось
Павел
Но если делаешь simple приходит строгий дядя Doebal Dmitrij Davidovih
На самом деле это самое вкусное. Надо часть проекта делать по стандартам ДДД, а часть по круду тупому, а часть вообще какой нить код ген или готовые решения. В этом одна из фишек контекстов
Юра
Я как-то писал сервис, он быд написан не очень в плане архитектуры но работал и приносил деньги. Так вот однажды менч спросили, а если завтра тебя собьёт авобус что будет? )
Юра
И я так понял что хоть ДДД не поможет мне с автобусом, но другим будет проще
Юра
А если не а валидном то не будет сохранения
Юра
Ну вот так это все и начинается
Юра
Не буду
Павел
Это не так проверяется
Все "так" пока это работает и нормально развивается :)
Nikolay
Многие подходы описанные в документации симфони это плохие практики
Юра
На костер его )
Павел
)))
Павел
Например можно вообще какой нить префлаш сабскрайбер повесить и проверять всё валидатором перед сохранением. Решает проблему "забыл вызвать валидатор". Да, сложнее тестить инварианты. А многие вообще тесты не пишут. И вот выходит а нафига всё это, тем более если круд)
Павел
Тогда в таких кейсах можно без ентити обойтись
Это упростит задачу? Не думаю. Все равно где то надо писать правила валидации. Плюс правила сохранения и прочего.
Павел
Теже дифы миграций
Gleb
По более общей терминологии советую начать с https://elisdn.ru/blog/142/structs-or-objects и дальше прочесть части о зависимостях.
Спасибо за конкретный материал. Ваше можно читать не перечитать, смотреть не пересмотреть. )))
Viktor
Ребят, всем привет! Возможно, кто-нибудь сможет помочь разобраться с сериализатором. Пытаюсь десериализовать json в объект. Одно из полей объекта имеет тип \DateTime: public ?\DateTime $date; Все время получаю ошибку Expected argument of type "?DateTimeInterface", "string" given at property path "date"." Это все я делаю в своем бандле. Конфиги в xml настраиваю. ``` <service id="Symfony\Component\Serializer\Normalizer\ObjectNormalizer"> <argument type="service" id="serializer.mapping.class_metadata_factory"/> <argument type="service" id="serializer.name_converter.camel_case_to_snake_case"/> <tag name="serializer.normalizer"/> </service> <service id="Symfony\Component\Serializer\Normalizer\DateTimeNormalizer"> <tag name="serializer.normalizer"/> </service> <service id="Foo\RequestDtoBundle\Transform\RequestDtoTransform"> <argument type="service" id="serializer"/> </service>``` Заранее спасибо!
Viktor
Скорее всего не хватает нормализера для дат
в коде выше попытался его подключить. но что-то видимо делаю не так.
artem
* @Serializer\Accessor(getter="getEndDate", setter="setEndDate")
artem
на крайний случай
Viktor
я это делаю в своем бандле, который будет использоваться в нескольких других репозиториях. поэтому аннотациями не очень хочется
artem
use Symfony\Component\Serializer\Context\Normalizer\DateTimeNormalizerContextBuilder; $contextBuilder = (new DateTimeNormalizerContextBuilder())->withFormat('Y-m-d H:i:s'); $serializer->serialize($something, 'json', $contextBuilder->toArray());
Andrey
Andrey
Andrey
Всем привет. Подскажите кто хорошо с доктриной знаком, из-за чего могут создаваться подобные запросы, и как их избежать?
Юра
Пагинация наверное
Павел
Там вроде есть в доке по пагинации доктрины как это убрать принудительно, НО только если нет one to many
Юра
И мени ту мени
Юра
Зачем придумали семвер кто-то знает?
Юра
Почему все на него болт кладут )
Юра
Хотя .. короче симфа измерила аргументы нормалайзера, в конструкторе
Юра
А у меня был налседник от него ну и все сломалось конечно
Vlad
а зачем наследоватся?
Юра
Ну вот понадобилось
Юра
Класс то не final
Vlad
ну поясни
Юра
Да вопрос не в этом. Перепишу на композицию
Юра
Вопрос в том что поменяли аргументы не финал класса в минорной версии
Vlad
Да вопрос не в этом. Перепишу на композицию
ну вот была бы композиция ничего не поломалось бы))
Юра
Совет из разряда не ломай и не сломается )
Vlad
ну нефиг наследования использовать))
Юра
А как же стул налседует от собаки потомк что к него четыре ноги?
Юра
В пхп не хватает как в джаве, визибилити на уровне пакетов. Да и пакетов не хватает. Да и джавы не хватает в пхп
Vlad
@internal мало?
Юра
И что это даст
Юра
Так бы можно было сервисы приватнве для пакета, а интерфейсы публичные
Юра
И все
Vlad
будет бить по рукам стат анализ
Юра
ну он бы бил если бы класс был почемен интернал
Юра
только кто это делает вообще
Юра
Ну кстати композиция тоже сломана
Юра
с их примера
Юра
public function __construct(UrlGeneratorInterface $router, ObjectNormalizer $normalizer) { $this->router = $router; $this->normalizer = $normalizer; }
Юра
Ошибка Argument #2 ($objectNormalizer) must be of type Symfony\Component\Serializer\Normalizer\ObjectNormalizer, Symfony\Component\Serializer\Debug\TraceableNormalizer given
Vlad
зачем тебе реализация
Юра
затем что мне надо вызвать дефолтный если мой не подходит
Vlad
а нельзя контракт заинжектить?
Vlad
тока через сеттер