Size: a a a

JavaScript fwdays

2020 April 15

V

Viktor in JavaScript fwdays
7. Если у тебя реляционная БД, то все равно остается проблема мисматча между объектоной и реляционными моделями и засериализировать состояние доменной модели в базу будет не просто и будет делаться куча работы, которую решили на уровне ОРМ (возможно под более универсальную задачу, но это не значит, что оно не покрывает бизнес-кейсы текущего проекта)
источник

V

Viktor in JavaScript fwdays
Ну и 8 лет назад еще про это Фаулер неплохо написал - https://martinfowler.com/bliki/OrmHate.html
источник

TS

Timur Shemsedinov in JavaScript fwdays
Я против применния ООП для модели предметной области в 90% случаев. ООП хорош для системного программирования (оборачивать абстракции ОС, структуры данных, системные вещи в удобную ООПшную оболочку), еще ООП подходит для UI, для моделирования игровых миров, для моделей управления роботами и вообще IoT, для активных систем, в общем, где есть поведение. А для информационных систем модель нужно делать в структурах данных + API над структурами. Как это принято в Go, например.
источник

V

Viktor in JavaScript fwdays
Для игровых миров ООП, как раз накладывает слишком много ограничений и, ИМХО, там часто лучше заходит entity component system
источник

TS

Timur Shemsedinov in JavaScript fwdays
Yevhen
Аргументы понятны. Спасибо за ответ!
Вот тут еще есть доклад, почему все чезез Ж в ИТ - https://youtu.be/nvIJE6xMpiI
источник

TS

Timur Shemsedinov in JavaScript fwdays
Viktor
Для игровых миров ООП, как раз накладывает слишком много ограничений и, ИМХО, там часто лучше заходит entity component system
ну там есть кейсы для ООП, конечно иногда матрицами можно моделировать, иногда автоматами, ингда графами... но ООП подходит там в 50%
источник

Y

Yevhen in JavaScript fwdays
Спасибо, посмотрю
источник

AB

Andrey Blazhey in JavaScript fwdays
Viktor
Тимур,  очень поверхностное заявление.
1. Нельзя делить все на черное и белое. В разработке наиболее важен здравый смысл. Догматическое следование каким-то бест-практисес может без проблем развалить проект. Всегда есть контекст и нужно смотреть по ситуации.
2. Есть масса успешных компаний, которые отлично развивались на ORM. Тут же basecamp и сейчас на ORM (есть видео от DHH классные про то, как они пишут код) Twitter изначально был на Ruby и ActiveRecord и это не значит, что им выгодна была лапша.  Посмотри сколько проектов на RoR, я знаю техлидов с с PayPal и они совсем не против ORM.
3. Есть масса зафейленых стартапов, которые решили, что и не нужен ORM (и возможно еще, что обязательно нужны микросервисы). Им отсутвие ORM никак не помогло, а в некоторых случаях могли и стать причиной фейла.
4. Я не за ORM и не против. У нас есть и проекты на базе ORM и без ORM. Например, в платформе по автомтизации умного дома у нас не было ORM, у нас был репозитории объектов, что позволило нам кардинально поменять схему хранения не поменяв ни строчки кода бизнес-логики. Просто все зависит от контекста.
5. Да ORM накладывает ограничения и Гугл оно не подойдет, но давайте сначала станем, как Гугл :). Задача архитектора соотнести технические и бизнес риски. И возможно правильней сделать, к примеру, как твиттер (а может и нет, зависит от многих факторов)
6. Энтерпрайз приложения обычно содержат очень много справочников и много CRUD и поэтому ОРМы тут часто заходят
небольшое уточнение
basecamp он же DHH
который и разрабатывал RoR и их activerecord
по сути под себя сделали и выпустили в опенсорс
источник

V

Viktor in JavaScript fwdays
Да, это круто, когда ОРМ и фреймворк не просто с теории, а проверен реальным сложным продакшеном и сложной бизнес-логикой
источник

V

Viktor in JavaScript fwdays
Дальше, ORM решает многие проблемы безопасности. Те же SQL инъекции
источник

TS

Timur Shemsedinov in JavaScript fwdays
Ну sql инъекции решаются параметрическими запросами, что всегда встроено в драйвера конекшенов к базе
источник

V

Viktor in JavaScript fwdays
Да, но я смотрю на код бойлерплейта и там есть ряд недочетов связанных с безопасностью
источник

V

Viktor in JavaScript fwdays
в том же модуле db.js
источник

S(

SkipTyler (Sunrise) in JavaScript fwdays
SkipTyler (Sunrise)
#вопрос

Какую бд использовать для поиска по большому количеству записей в таблице?

И как быть с тем,  что у меня в поле может лежать большой JSON со вложенностью.
(я никогда не могу знать,  какая структура и вложенность,  так как тут играет фантазия пользователя)
Чем может быть плоха в данном случае mongo?
В сравнении с postgres
источник

V

Viktor in JavaScript fwdays
Зависит от объема данных, от того как ты ищешь и тд. К примеру у нас отлично работал Монго с базой в 600ГБ. Также все зависит от бизне-требований. К примеру, мы делали searchField и конкатенировали туда все слова для поиска с других полей (если есть сложной формы документ, то можно просто собрать все слова в одно поле) и добавляли полнотекстовый индекс. С точки зрения пользователя - это было одно поле в UI для поиска (типа как у Gmail)
источник

V

Viktor in JavaScript fwdays
Но по перформансу полнотестовый поиск в Монге был сильно медленее, чем тот же elasticsearch  (для нашего же случая). Но нас устраивало, и мы решили не поднимать дополнительный elastic
источник

TS

Timur Shemsedinov in JavaScript fwdays
SkipTyler (Sunrise)
Чем может быть плоха в данном случае mongo?
В сравнении с postgres
источник

S(

SkipTyler (Sunrise) in JavaScript fwdays
спасибо!
источник

TS

Timur Shemsedinov in JavaScript fwdays
Viktor
Да, но я смотрю на код бойлерплейта и там есть ряд недочетов связанных с безопасностью
он еще не готов, но всегда велкам добавлять фича-реквест, баг-репорт, пул-реквест
источник

Д

Дмитрий in JavaScript fwdays
Немного офтопа, Тимур, а какой у вас дистрибутив?
источник