
Valeriy
08.07.2017
10:45:09
https://github.com/typeorm/typeorm/issues/586
Я надеялся найти человека, который сам юзает, какой-нибудь orm под typescript
И конечно же для продакшэна просто компилим джээс файлы)

Google

Valeriy
08.07.2017
10:48:18
Даже в дэв моде
На бэке выгодно использовать строгую типизацию
Меньше багов

Aleh
08.07.2017
10:48:53
Typeorm еще слишком сырая кмк
Я б не юзал, но ничего лучше нет, так что остается ручками

Valeriy
08.07.2017
11:10:33
А как же sequelize?)

Artur
08.07.2017
11:12:06

Valeriy
08.07.2017
11:12:51
Да)

Ilshat
08.07.2017
13:06:08
Под ноду не находил чета орм

Сергей
08.07.2017
13:10:27
это ORM

Ilshat
08.07.2017
13:15:45
Да как то оно не кажется ормом просто, после бэковых ормов, может это из-за жэс хз, ну на ноде оно покрывает все мои нужды и миграции норм юзаю

Google

Artur
08.07.2017
13:50:38

Ilshat
08.07.2017
13:51:27
Шта

Aleh
08.07.2017
13:55:59
Деление на орм и нет в объектных языках оч условно
Если после запроса вы получили объект, то у вас орм)
При этом необязательно это active record или data mapper

Nikolay
08.07.2017
14:13:01
как наикротчайшим способом скастить объект у которого есть .toString() до строки?
<string>obj не предлагать, ибо jsx )

andretshurotshka?❄️кде
08.07.2017
14:19:43
as string ?)

Aleh
08.07.2017
14:25:35
Это не скастит его в строку
В чем проблема вызвать .toString()
?

Nikolay
08.07.2017
14:32:22
ну некрасиво)
className={blablaFunc().toString()}

Дмитрий
08.07.2017
14:37:58
& string)

Artur
08.07.2017
14:38:30

Aleh
08.07.2017
14:38:53

Nikolay
08.07.2017
14:39:03
)
а если так someFunc() + ''

Aleh
08.07.2017
14:39:34
Это неявные преобразования
И попоболь в целом

Google

Artur
08.07.2017
14:39:51

Aleh
08.07.2017
14:40:13

Artur
08.07.2017
14:41:09
Почему акцент на identity map?
Ну, грубо говоря: blogRecord.getOwner() === OwerRegistry.getById(currentUser) - либа использует одни и те же инстансы для отображения строк БД на объекты

Aleh
08.07.2017
14:41:39

Artur
08.07.2017
14:42:37
Подходит под определение из вики например: ORM (англ. Object-Relational Mapping, рус. объектно-реляционное отображение) — технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».
А если просто на выходе из БД объект, но каждый раз разый - это просто кверибилдер )

Aleh
08.07.2017
14:50:18
Ну вообще да, хороший критерий

Vladimir
08.07.2017
14:52:48
Нет, это плохой критерий
Если какой то ORM так работает, то это очень плохой ORM

Artur
08.07.2017
14:53:45

Vladimir
08.07.2017
14:54:26
Значит ты знаешь только очень плохие ORM

Artur
08.07.2017
14:54:36
Давай пример хорошей

Vladimir
08.07.2017
14:54:43
Hibernate
Объясняю, почему так
Прилетает запрос, берет сущность из базы
Апдейтит ее и пытается коммитить
Параллельной прилетает друго запрос на ту же сущность, берет ее из identity map и отдает
Дальше траназакция из первого запроса откатвается
В итоге второй запрос пролучает незакомиченные данные

Artur
08.07.2017
14:57:35
Ну это же другой уровень проблем. Изоляция и всё такое. Например ORm может трекать изменившиеся незакоммиченные сущности и для параллельного запроса отдавать не из identity map

Google

Vladimir
08.07.2017
14:58:01
identity map это in-process cache
На бэкэнде редке применяется in-process cache вообще

Artur
08.07.2017
14:58:31

Dmitry
08.07.2017
14:58:50
в примере выше - все становится гораздо веселее, если бы сущность не бралась из Identity map, а транзакция первая закоммиталась успешно

Vladimir
08.07.2017
14:59:01
Не становится
Два конкурентных запроса
Один выполнился раньше другого и вернул консистентные данные

Artur
08.07.2017
15:00:41
Короче, хотя бы в рамках одного запроса identity map должен быть.

Vladimir
08.07.2017
15:00:54
Зачем?

Artur
08.07.2017
15:01:17
А вот это хороший вопрос

Admin
ERROR: S client not available

Artur
08.07.2017
15:01:37
Наверно в node-like и java-like бекендах это будет скорее только мешать
Просто мой основной опыт это похапе и доктрина, там это помогает

Vladimir
08.07.2017
15:02:10
Ну ок, в них зачем?

Artur
08.07.2017
15:02:27
blogRecord.getOwner() === OwerRegistry.getById(currentUser)
Вот же. Когда сложная бизнес-логика (а не просто выгрузить список комментов), помогает избегать рассинхрона

Vladimir
08.07.2017
15:03:33
Ну вместо этого можно вызывать метод или сравнивать id

Artur
08.07.2017
15:03:55

Vladimir
08.07.2017
15:04:27
Что поехало то?

Artur
08.07.2017
15:05:02

Google

Vladimir
08.07.2017
15:05:16
Ну так ты же сам два интсанса делаешь
Не делай два, делай один

Artur
08.07.2017
15:05:25
Эм, нет
Я не делаю два инстанса
Ну вот ещё пример:
task.getOwner() === todo.getOwner()
В такого рода коде я вообще не делаю инстансы, я прошу ORm дать мне владельцев сущностей. И если это один и тот же владелец то и инстанс должен быть один

Летучая
08.07.2017
15:57:06

Aleh
08.07.2017
16:00:12
Т.е. из кешируемого только ссылка на объект, данные никакие не кешируются
Короче говоря, только плохие orm используют identity map как кэш сущностей с данными

Artur
08.07.2017
16:23:27

Aleh
08.07.2017
16:23:55
Никакой запрос изначально не ходит в im
Все они идут в базу, а после по полученным id ходят в im
А далее уже несколько случаев

Bohdan
08.07.2017
17:05:42
Я бэк пишу на тайпскрипт
TypeORM в качестве орм
InversifyJS в качестве di
express - http фрэймворк, естественно
inversify-express-utils для связки тайпскрипт, экспресс и inversify
Очень удобно
Еще там какую то либу от инверсифи использую помимо express-utils
Вокруг этого всего сделал обертку в виде фреймворка, кому нужно могу дать поюзать

Dmitry
08.07.2017
17:15:45
ребят, а кто может сказать, что не нравится flow? когда я задаю типы для props