
Sergei
08.12.2016
19:16:40
И Doctrine по ним и определяет мапинг полей в таблицы?

da horsie
08.12.2016
19:16:50
да

Sergei
08.12.2016
19:16:51
Ок, ожидаемо.

da horsie
08.12.2016
19:16:53
как вариант

Google

da horsie
08.12.2016
19:17:12
что такое декораторы и атрибуты я не знаю

Sergei
08.12.2016
19:18:09
Думаю, та же фигня. Когда к методам и данным класса можно присоединить объект, как-то их описывающий.

da horsie
08.12.2016
19:18:48
такого я не знаю
но звучит похоже на аннотации

Sergei
08.12.2016
19:20:40
[Table("users")]
Class User{
[Field("user_name")]
string username;
[Field("user_age")]
int age;
}

da horsie
08.12.2016
19:20:57
а
ну по сути тоже самое
только в пыхе это через reflection
внутри они ни что иное как док-блоки, комментарии
на которые навешана логика, которая их парсит через рефлекшн

Sergei
08.12.2016
19:22:23
Кругом всё одно и то же :/

Google

da horsie
08.12.2016
19:23:08
а это c# код?

Sergei
08.12.2016
19:23:20
Да

da horsie
08.12.2016
19:23:28
комменты в квадратных скобках?

Sergei
08.12.2016
19:23:34
Ага

da horsie
08.12.2016
19:23:53
и эти люди запрещают мне ковыряться в носу

Sergei
08.12.2016
19:24:11
При этом комменты эти - на самом деле экземпляры объектов, которые можно выципить через рефлекшен.
Типа берёшь неких неведомый объект, получаешь его тип, далее через рефлекшен ходишь по дереву типа по всем его полям; про каждое поле спрашиваешь, есть ли ассоциированные с ним объекты?
Положим, есть; провеяшь, а этот "ассоциированный объект" (атрибут) случайно не типа Field?
Положим, он и есть Field.
Ок, тогда у него спрашиваешь например getName() - и вот теперь тебе известно, что неведомую фигню нужно сохранить в таблицу данных в поле с именем "user_name".

Aleh
08.12.2016
19:27:51
ну в пхп еще можно через .yml файлы
или xml/php
тогда в самой сущносте вообще нет никаких отсылок к доктрине

Sergey
08.12.2016
19:28:33
аминь
рекомендованный вариант - xml
аннотации - это для ленивых (как я)
> Ок, тогда у него спрашиваешь например getName() - и вот теперь тебе известно, что неведомую фигню нужно сохранить в таблицу данных в поле с именем "user_name".
у меня нет геттеров, шах и мат
о чем разговор? о том что дата мэпперы не нужны?

Sergei
08.12.2016
19:29:48
О том как в разных языках устроены orm, и почему это хорошо/плохо/никак.

da horsie
08.12.2016
19:30:41
ну егор-то топит за active record

Google

da horsie
08.12.2016
19:31:02
за какой-то ультраортодоксальный его вариант

Sergei
08.12.2016
19:31:09

Evgeniy
08.12.2016
19:31:28
нету generic
reflection есть в php но сделан он медленно
annotation вообще через жопу сделаны по сравнению с java

Sergei
08.12.2016
19:32:02
По-моему оно везде медленно

Evgeniy
08.12.2016
19:32:17
в php annotation на уровне языка НЕТ

Sergei
08.12.2016
19:32:27
В Go аннотации вообще в виде "строка".

Evgeniy
08.12.2016
19:32:29
есть просто договоренность фигарить их в коменты обычные)

Sergei
08.12.2016
19:32:33
Люди как-то живут.

Evgeniy
08.12.2016
19:32:47
в php аннотация в обычном комментарии

Sergei
08.12.2016
19:32:49

da horsie
08.12.2016
19:32:59
да

Evgeniy
08.12.2016
19:32:59
который никак языком не обрабатывается его надо отдельно парсить

da horsie
08.12.2016
19:33:25
как минимум, специально оформленные комменты
а так хз на самом деле

Sergei
08.12.2016
19:33:53
Вы суровые :)

Evgeniy
08.12.2016
19:34:11
я просто и на java работал и на php :D

Aleh
08.12.2016
19:34:41
да, только doc comments
причем на самом деле разные парсеры по-разному относят их к разным нодам

Google

Aleh
08.12.2016
19:35:29
с полями класса еще более-менее ясно

Sergey
08.12.2016
20:30:36

Sergei
08.12.2016
23:57:24
про ОРМ тоже смотрел?
Посмотрел. По существу услышал следующее: "если вы экспозите внутренние данные объекта наружу - то это обычно херово".
Соглашаюсь с автором.
Там дальше были обсёждения типа "а что если не SQL, а NoSQL? Или json? Или XML?" - вот оно ровно всё про то же: экспозить наружу данные объекта под предлогом "for greater good" - вот оно это плохо. Сложно с этом несогласиться.
Почему никто не протестует? :)

Sergey
09.12.2016
00:36:21
ну накину... а где собственно "экспоузить наружу"?
что до nosql - агрегаты сущностей
если мы говорим о решениях вроде Doctrine/Hibernate и не делаем геттеров/сеттеров просто так - то вроде ж все хорошо, нет?

Sergei
09.12.2016
00:37:20

Sergey
09.12.2016
00:37:44
альтернатива - писать мэпперы руками
добавлять DTO
добавлять гейтвеи

Sergei
09.12.2016
00:38:00

Sergey
09.12.2016
00:38:25
насколько я помню Егор топит за DAO потому что "очевиднее"
и я согласен, хибернейты всякие это магия
но с практической точки зрения - я не хочу возиться с базой от слова совсем. Для быстрой разработки - норм

Sergei
09.12.2016
00:39:24

Sergey
09.12.2016
00:39:32
та же штука что и с DI, да, магия, да, неявно, да, мы не знаем всей сокрытой сложности... но ради этого же и делалось

Google

Sergei
09.12.2016
00:39:51
Как вариант, когда "почти то же самое, но без internals exposed.

Sergey
09.12.2016
00:40:26
так что делать то?)
как жить?
особенно в PHP где у тебя выбора особо то и нет
в java у тебя хотя бы есть техническая возможность не нарушая инкапсуляцию сильно сделать удобно и "правильно"
а в php такой возможности особо нет

Sergei
09.12.2016
00:45:41
Хм...
В пхп можно спрятать всю кашу с orm внутри объекта, за интерфейсом поведения?

Sergey
09.12.2016
00:48:43
интеракторы дяди боба?)
тут вопрос что значит "каша"?
приведу пример. У нас есть штуки которые пишут, и штуки которые читают
штуки которые пишут достают из репозиториев сущности, что-то просят их сделать, после чего происходит флаш юнит оф ворк
штуки которые только читают (например для ответов апишки, или шаблонов) могут уже игнорировать ORM и составлять специализированные DTO специально для того что нужно.
"прятать" ORM и работу с сущностями имеет смысл только для чистых операций чтения
во всяком случае это мое мнение на данный момент

Artur
09.12.2016
01:49:43
иного чёт понафлудили

Sergey
09.12.2016
08:06:51
омг только заметил http://ru.yegor256.com/
да уж, быстро о человеке потрится впечатление)