Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ORMs: You’re Doing it wrong
Search
Vitaly Slobodin
March 06, 2015
Programming
0
140
ORMs: You’re Doing it wrong
Vitaly Slobodin
March 06, 2015
Tweet
Share
More Decks by Vitaly Slobodin
See All by Vitaly Slobodin
Затащи меня в ад
vitallium
0
50
Что нам новый .NET несет?
vitallium
0
94
ORMs: You're doing it wrong (continued)
vitallium
0
73
ASP.NET MVC 5
vitallium
0
290
Other Decks in Programming
See All in Programming
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
190
Implementation Patterns
denyspoltorak
0
280
Oxlint JS plugins
kazupon
1
890
AtCoder Conference 2025
shindannin
0
1.1k
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
4
540
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
230
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
100
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
1.1k
「ブロックテーマでは再現できない」は本当か?
inc2734
0
970
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
230
AI & Enginnering
codelynx
0
110
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
Featured
See All Featured
Building an army of robots
kneath
306
46k
Are puppies a ranking factor?
jonoalderson
1
2.7k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
340
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
210
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2k
Designing for Performance
lara
610
70k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
410
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
450
Claude Code のすすめ
schroneko
67
210k
A designer walks into a library…
pauljervisheath
210
24k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.9k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
140
Transcript
ORMs: You’re Doing it wrong Виталий Слободин @vitalliumm http://github.com/vitallium Based
on presentation “ORMs: You’re Doing it wrong” by Jimmy Bogard
Что такое ORM? “ORM (object-relational mapping, объектно-реляционное отображение) — технология
программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования”
Приложение База данных
Шаблоны проектирования: Active Record Для данной таблицы создаётся специальный класс
Active Record, являющийся отражением (представлением) таблицы. Каждый экземпляр данного класса соответствует одной записи таблицы.
Шаблоны проектирования: Data Mapper Data Mapper — это программная прослойка,
разделяющая объект и БД. Его обязанность — пересылать данные между ними и изолировать их друг от друга
Поведенческие шаблоны (проектирования) Unit Of Work Identity Map
ORM это не
ЗЛО
Магия
Проблемы связывания и проекций
Плохо: генерация из базы данных
Хорошо: Подход Code First
Плохо: лишние свойства навигации
Хорошо: YAGNI ассоциации
Плохо: повторение проекций
Хорошо: соглашение о проекциях (mapping conventions)
Плохо: проекция отношения многие-ко- многим
Хорошо: создание проекции таблицы многие-ко-многим
Плохо: навязывание (недостаточность) примитивных типов
Хорошо: пользовательские типы
Хорошо: пользовательские типы
Проблемы с запросами
Плохо: Излишняя отложенная загрузка / SELECT N+1
Плохо: Излишняя отложенная загрузка / SELECT N+1
Хорошо: моментальная загрузка
Плохо: декартовы произведения
Хорошо: множественные запросы
Плохо: Я джедай LINQ!
Хорошо: используйте темную сторону силы - SQL
Плохо: лишние данные
Хорошо: проекции (DTO)
Хорошо: проекции (DTO)
Итоги •ORMs – не зло •SQL – не зло •Разработчики
– идиоты иногда просто не знают, как лучше
Спасибо!