@typescript_ru

Страница 271 из 669
Valeriy
08.07.2017
10:45:09
Попробуй typeorm, пока что самая продвинутая из тех что видел
Спасибо) уже пробывал) она мне не понятна)

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
А как же sequelize?)
Норм идёт, но это не орм, это больше квери билдер

Под ноду не находил чета орм

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

Google
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
Если после запроса вы получили объект, то у вас орм)
Я бы сказал так: если в либе есть Identity Map, то есть каждая сущность предметной области присутствует только один раз, то вот тогда это orm

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
Если какой то ORM так работает, то это очень плохой ORM
Все известные мне ORM так работают ?

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
identity map это in-process cache
Как реализуешь, такой и будет. Хоть per-process, хоть per-request, а хоть комбинированное - данные не меняются, отдаём из памяти

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
Ну вместо этого можно вызывать метод или сравнивать id
А если данные меняем? Один инстанс поменялся, другой нет, и поехало

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
а если так someFunc() + ''
В щи за такое говно

Aleh
08.07.2017
16:00:12
Параллельной прилетает друго запрос на ту же сущность, берет ее из identity map и отдает
Он ж не берет ее из im, а апдейтит имеющуюся сущность либо при конфликте кидает эксепшн

Т.е. из кешируемого только ссылка на объект, данные никакие не кешируются

Короче говоря, только плохие 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



Страница 271 из 669