
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 из реквеста\формы гибче

Dmitry
16.11.2017
14:28:22


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:34:07

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

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

Google

Алексей
16.11.2017
14:38:53

Dmitry
16.11.2017
14:39:37

Алексей
16.11.2017
14:41:08

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

Andrey
16.11.2017
14:42:53

Tex
16.11.2017
14:43:00
в случае с 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

Roman
16.11.2017
16:08:34

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
Не, в дто
В сущности?


Sergey
16.11.2017
17:19:21

Алексей
16.11.2017
17:19:21

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 в формах

Sergey
16.11.2017
17:26:38

Dmitry
16.11.2017
17:26:39

Антон
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

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

Алексей
16.11.2017
17:31:02

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, просто то, что я видел - это не многое

Sergey
16.11.2017
17:37:28

Алексей
16.11.2017
17:37:30

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
я когда увидел - немного прифигел
но в целом удобно - те же сеттеры, но теперь когда открываешь сущность - не нужно продираться через кучу бойлерплейт кода
ну и геттеры