@symfony_php

Страница 402 из 1418
Dmitry
16.11.2017
14:26:06
это не то?
норм будет? все правильно денормализирует?

Tex
16.11.2017
14:26:21
а почему не валидную?
смотри, у тебя есть объект, с N полей. валидным он считается только если все поля заполнены. часть из них ты берешь из реквеста, за еще какой-то частью лезешь во внешний сервис. если с реквеста сходу собрать сущность - валидацию она не пройдет, потому что часть полей пусты.

Andrey
16.11.2017
14:26:22
object(Foo)#6 (2) { ["first"]=> int(1) ["second":"Foo":private]=> int(2) }

норм будет? все правильно денормализирует?

Google
Dmitry
16.11.2017
14:26:46
Tex
16.11.2017
14:27:11
да, это не всегда актуально, если сущности простые, но подход с DTO из реквеста\формы гибче

Tex
16.11.2017
14:32:02
много кода..
разделение ответственности. сущность - твои данные в базе. DTO - данные, получаемые извне. если использовать сущность и для обработки реквеста и для сохранения базы, ты будешь менять структуру базы на каждое изменение формата данных во внешних источниках?

Andrey
16.11.2017
14:32:19
см. RAD

Dmitry
16.11.2017
14:32:27
да и вообще... откуда у вас в сущности сеттеры

;)

Dmitry
16.11.2017
14:37:02
а не должны быть

Dmitry
16.11.2017
14:37:27
почему?

Google
Алексей
16.11.2017
14:38:53
сеттер - это и есть определение публичного метода для установки значения приватного свойства
А если у тебя нет сеттеров в объектах, то что - сериализатор не использовать?

Алексей
16.11.2017
14:41:08
Tex
16.11.2017
14:41:38
см. RAD
ну, я больше работаю с крайне долгоживущими проектами, ушедшими из состояния прототипа. поэтому устойчивость к изменениям важнее скорости разработки.

Tex
16.11.2017
14:43:00
"изменение формата данных во внешних источниках" а почему формат будет менятся?
потому что может. бизнес захотел заменить поле "срок годности в месяцах" на "срок годности в годах". или внешнее API, откуда ты берешь данные, выпустило новую версию с новым набором данных и тебе надо с этим жить.

в случае с DTO ты заменяешь поле там и в конвертере добавляешь немного логики (получить года, умножить на 12, сохранить как месяцы). в случае с сущностями ты.. мхм. мне только всякая грязь в голову приходит. логика с умножением в сеттере? менять поле в т.ч. в базе? ругаться на всех и требовать данные в старом формате?

Daniel
16.11.2017
15:04:46
Мне про сеттеры интересно

В сущности?
Это плохо?

Tex
16.11.2017
15:24:26
Это плохо?
в теории. с ними проще, если RAD и вот это всё. но минус в том, что есть возможность получить невалидную сущность. собирать сущность через конструктор или десериализацию\денормализацию и не воздействовать на неё точечными изменениями надежнее.

Алексей
16.11.2017
15:41:12
Это плохо?
Ну, если в сущности публичные свойства, то должно ли это быть сущностью, а не DTO/VO?

smile
16.11.2017
15:41:39
в vo публичное свойство?) интересно

учитывая что он имутабелен

Алексей
16.11.2017
15:42:54
в vo публичное свойство?) интересно
Речь не о публичном свойстве, а о том, что, похоже, сущность используется не как сущность и там лучше подойдёт что-то другое. Что именно - зависит от кейса. // Я имею в виду, что похоже на то, что она используется как тупой контейнер для данных, а не как объект содержащий бизнес-логику.

Борис
16.11.2017
15:43:13
Кто подскажет каких статей сравнения symfony/serializer jms/serializer thephpleague/fractal ? Ну или хоть свой опыт выбора скажите

Антон
16.11.2017
15:57:40
https://blog.martinhujer.cz/symfony-forms-with-request-objects/ нормальный подход не использовать сущности в формах?

или посоветуйте статью, или пример

Alexander
16.11.2017
15:59:49
Ну вся суть в этой статье в этом // create an instance of an empty CreateArticleRequest $createArticleRequest = new CreateArticleRequest(); // create a form but with a request object instead of entity $form = $this->createForm(ArticleFormType::class, $createArticleRequest);

Чем плох пример из документации?

Когда надо используешь сущности, когда формы более сложные чем одна сущность туда лучше не привязывать ее к сущности, и делать как в статье.

Google
Alexander
16.11.2017
16:10:39
Что не хорошего то? Есть сущность, есть форма на ее создание. Да даже если просто генерировать CRUD, симфони сделает так что подставит enitity в форму.

Когда это нужно то вполне все удобно.

Roman
16.11.2017
16:12:53
Когда это нужно то вполне все удобно.
У вас сеттеры и геттеры в сущности?

Alexander
16.11.2017
16:13:05
да

Roman
16.11.2017
16:16:41
да
Если проект без логики особой или не важна поддержка в будущем, то сойдёт. Но если бы я знал, что проект останется у нас на поддержке, все равно делал бы через объект как в статье

да
Делайте как вам удобнее.

Dmitry
16.11.2017
17:04:50
Не, в дто

В сущности?

потому что может. бизнес захотел заменить поле "срок годности в месяцах" на "срок годности в годах". или внешнее API, откуда ты берешь данные, выпустило новую версию с новым набором данных и тебе надо с этим жить.
В таком случае хранится конечная дата, и не зависит от дней, месяцов, годов Я это к тому, что у подобных проблем есть решения (они сразу и продумываются)

Sergey
16.11.2017
17:19:31
это анемичная модель данных

ну то есть большинство так и делают)

Kirill
16.11.2017
17:24:48
Dmitry
16.11.2017
17:25:43
ужасно
почему?

Sergey
16.11.2017
17:25:46
Но где же грань?)
какая грань?

почему?
субъективная оценка решения. Отсутствие information hiding. Невозможность покрытия изолированными тестами. Боль

Google
Антон
16.11.2017
17:26:25
@fes0r ты бы накидал примеры в гитхабе как делать не надо и почему ))) я бы тебе огромное спасибо сказал. Анемичные модели, DTO в формах

Dmitry
16.11.2017
17:26:39
Так это не сущность, это DTO какой-то.
ну а как же описание конфигураций ORM..

Антон
16.11.2017
17:27:03
прям иногда хочется просто живой рабочий пример увидеть

Andrey
16.11.2017
17:27:05
Развели разговор с пустого места, конечно

Алексей
16.11.2017
17:27:07
Andrey
16.11.2017
17:27:30
Лучше помогите разобраться https://github.com/php-ds/extension/issues/106

Алексей
16.11.2017
17:27:34
Развели разговор с пустого места, конечно
Не в этом ли суть таких чатиков?

Sergey
16.11.2017
17:27:55
https://gist.github.com/fesor/370b3486cf7ee96af34fcbb286bd6563

Dmitry
16.11.2017
17:28:01
Admin
ERROR: S client not available

Sergey
16.11.2017
17:28:03
ну вот что-то из старого (надо перечитать)

Andrey
16.11.2017
17:28:04
Лучше помогите разобраться https://github.com/php-ds/extension/issues/106
Если есть желание покопаться, конечно)

Sergey
16.11.2017
17:28:21
думаю функциональными и юнит тестами можно спокойно покрыть
интеграционные приемочные - да. Юниты как изолированные тесты - нет

https://gist.github.com/fesor/dda6c4c37a17509f18c2c9486323d997/revisions

идти снизу вверх

Dmitry
16.11.2017
17:30:24
А что с ним не так?
ну вот создаю я "DTO", но с приватными свойствами, сеттерами/геттерами, описываю ORM, правила валидации, сериализации.. - ну какое это дто, это сущность

Sergey
16.11.2017
17:30:59
Dmitry
16.11.2017
17:33:36
Google
Sergey
16.11.2017
17:33:50
из-за взаисмодействия с внешним хранилищем?
из-за отсутствие какой-либо изоляции

и отсутствия возможности мокать сущности

(они ж тупо данные теперь, так что тяни их со всеми зависимостями)

Dmitry
16.11.2017
17:34:39
чет башка не особо варит уже, с утра перечитаю)

Sergey
16.11.2017
17:34:54
ну короч мне не импонируют транзакционные скрипты

но я понимаю что для большинства это норм

лучше так чем по контроллерам

Dmitry
16.11.2017
17:36:17
хотелось бы посмотреть на best practice, просто то, что я видел - это не многое

Алексей
16.11.2017
17:37:30
Скорее это DTO с идентификатором.
Хотя, конечно, тут и я неправ. Это, конечно, сущность по определению. Они, всё-таки обладают идентичностью, но они анемичны.

Sergey
16.11.2017
17:37:34
ну то есть... а может и оно

просто так не привыкли

Алексей
16.11.2017
17:38:43
Вот у нас на одном проекте всё почти на анемичных моделях и там они к месту. Правда, там отчасти из-за этого и Doctrine не особо нужна.

Dmitry
16.11.2017
17:38:46
да, привычки у каждого тоже свои, т.к. путь мы проходим по разному

а реализации уже зависят от задач, и у каждого свое видение решения

нужно будет как-то собрать пачку задач и сделать хорошие практики их решения

Sergey
16.11.2017
17:43:44
я все еще нуждаюсь в примерах которые по вашему мнению невозможно сделать без геттеров или сеттеров в сущностях

Алексей
16.11.2017
17:48:51
Да всё можно, по идее. У нас они, например, используются из-за того, что проект был начат с сонатой по RAD. А чтобы с сонатой без сеттеров - это огромные нагромождения на каком-то из слоёв городить.

Andrew
16.11.2017
18:04:13
я когда увидел - немного прифигел

но в целом удобно - те же сеттеры, но теперь когда открываешь сущность - не нужно продираться через кучу бойлерплейт кода

ну и геттеры

Страница 402 из 1418