
Artur
07.10.2017
22:37:46

Sergey
07.10.2017
22:37:57

Artur
07.10.2017
22:38:09

Sergey
07.10.2017
22:38:12
хотя я могу запилить ленивую инициализацию коллекций

Google

Sergey
07.10.2017
22:38:21
повторяю
пассивная запись

Artur
07.10.2017
22:38:45
ты про впринципе или про частный случай?
ты решаешь задачу экономии памяти?

Sergey
07.10.2017
22:40:12
основная цель - полностью разделить код для записи и чтения и избавиться от ненужных геттеров
экономия памяти, производительность и т.д. - это побочные эффекты
основная цель - разделить код и сделать работу с этим делом удобной
что бы я мог для простого списка сделать что-то типа SELECT u FROM users WHERE id=1 и закинуть сразу в json encode

Artur
07.10.2017
22:41:26
но это же.. лищние расходы
если потребуется и то и то

Sergey
07.10.2017
22:41:59

Google

Sergey
07.10.2017
22:42:14

Artur
07.10.2017
22:42:20
ну для расстранички можно ограничится, условно, стдклассом с raw запроса )

Sergey
07.10.2017
22:42:34
ай короч забей
ты делаешь предположение что "код говно, как же быть", а у меня говно только в том что приходится геттеры держать
CQS короч

Artur
07.10.2017
22:43:27

Sergey
07.10.2017
22:43:43
перефразирую - "операции обработки данных" и "операции отображения этих данных"
у тебя они по хорошему никогда не пересекаются

Artur
07.10.2017
22:44:29

Sergey
07.10.2017
22:44:49
ну и где тут "неудобство", где тут лишние расходы?

Artur
07.10.2017
22:44:54
но нода-то больше придётся обслуживать

Sergey
07.10.2017
22:45:03
как раз наоборот. По моим прикидкам кода существенно меньше выходит и код сам по себе упрощается

Artur
07.10.2017
22:45:33
ты имеешь ввиду экономия так как самогенерируемое а либа как бы не считается, если её зарелизить и она работает?

Sergey
07.10.2017
22:45:50

Artur
07.10.2017
22:45:56
ну вот я про то же

Sergey
07.10.2017
22:46:03
ну либа простая довольно

Artur
07.10.2017
22:46:08
так-то всё можно вынести )

Sergey
07.10.2017
22:46:10
я бы даже сказал примитивная

Google

Sergey
07.10.2017
22:46:25
а упрощение больше за счет более четкого разделения ответственности, это позволяет проще вносить изменения
и больш контроля
типа следующий уровень это уже полноценный CQRS
но с этим в php плохо

Artur
07.10.2017
22:46:53
если она позволила бы решать проблемы не с тупо маппингом а с чем-то большим, например с джоинами или комбайном на серию запросов - даже полезно было бы
т.е. денормализовывать данные

Sergey
07.10.2017
22:47:21

Artur
07.10.2017
22:47:25
как раз типичная страница "с контентом+джоины"

Sergey
07.10.2017
22:47:52
ну короч... я не понял что за проблемы с джойнами у тебя
я повторюсь - любой запрос который тебе может доктрина замэпить на сущности я смогу замэпить на dto
с джойнами, подзапросами, как хочешь

Artur
07.10.2017
22:49:08
наоборот же ДЕ
:)

Sergey
07.10.2017
22:49:14
но это не повод для разных контекстов создавать неявную связанность на уровне базы, для этой проблемы у меня как раз таки есть batch load данных

Artur
07.10.2017
22:49:21
или всётаки ->get
с гет даже круче

Sergey
07.10.2017
22:49:35
наоборот же ДЕ
у тебя результат любого sql запроса денормализованное представление данных. Далее ты просто их мэпишь

Artur
07.10.2017
22:49:47
если на этапе формирования запроса можно определить что можно на подуровнях подтягивать а не тупо копировать

Google

Sergey
07.10.2017
22:50:01
я не понимаю о каких проблемах ты говоришь... джойны какие-то приплел. у меня проблема - мне для UI нужен тупо стэйт, мне не нужна вся сущность

Artur
07.10.2017
22:52:22
условно
$user->country->name
$userDTO->countryDTO->name
подразумевает нормализацию+ссылки. по сути геттер. но можно конечно и тяп ляп
$userDTO->country_name
денормализация с прописанными полями
$userDTO->country['name']
денормализация "полная"

Sergey
07.10.2017
22:53:06
> $userDTO->countryDTO->name
почему у тебя имя класса просочилось в название поле? с какого перепуга оно меняется?

Artur
07.10.2017
22:53:08
и в 1 и 3 варианте можно сделать только id+name

Sergey
07.10.2017
22:53:29
> $userDTO->country_name
нет уж, пусть будет объект. Так расширяемее

Artur
07.10.2017
22:53:37
я бы сделал ->getCountry()

Sergey
07.10.2017
22:53:44
ЗАЧЕМ!

Admin
ERROR: S client not available

Sergey
07.10.2017
22:53:57
чем getCountry() отличается от ->country
и почему у тебя в country массив

Artur
07.10.2017
22:54:18
почему я туда добавил словло ДТО скорее
потому что там дто а не модель

Sergey
07.10.2017
22:54:32
дто не массив
это такой же класс с абсолютно такой же структурой полей (в моем случае)

Artur
07.10.2017
22:54:43

Sergey
07.10.2017
22:55:16
....никаких std классов
все с четко определенными типами

Google

Artur
07.10.2017
22:55:24
а последний пример был просто вариативность на тему

Sergey
07.10.2017
22:55:31
короч проехали

Artur
07.10.2017
22:55:38
так в данном случае я это и имел ввиду

Sergey
07.10.2017
22:55:53
хрень какая-то
нифига не понимаю что ты хочешь донести
пойду спать

Artur
07.10.2017
22:56:17
очевидно никто не будет делать UserDTO который стдкласс без описаний
->get просто чтобы показать что этих данных там может не быть(лезилоад)

Sergey
07.10.2017
22:58:33

Artur
07.10.2017
22:58:43
ооп же

Sergey
07.10.2017
22:58:45
да и зачем мне это показывать (прокси-классы ты можешь заюзать)

Artur
07.10.2017
22:58:46
расширяемость

Sergey
07.10.2017
22:59:02
ооп же
ООП как раз таки для того что бы СКРЫВАТЬ а не показывать там что-то о внутреннем устройстве
геттеры - не нужны
в контексте DTO уж точно

Artur
07.10.2017
23:00:37
с точки зрения ооп - да не нужны
но я про вариативность связанных полей в других таблицах
но если делать чёттипа
$userQuery = UserQuery::where()->with(Country::class );
$userDTO = UserDAO::getDTO($query);
$userDTO->name;
$countryDTO = $userDTO->country;
как-то так
осторожно жирная модель

Sergey
07.10.2017
23:03:33
насколько я понял ты пытаешься закрыть геттерами дырки с null-safety