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
Укрощение нормализированного состояния
Search
Alexander Saenko
September 28, 2019
Programming
0
93
Укрощение нормализированного состояния
Алексей Демедецкий
Alexander Saenko
September 28, 2019
Tweet
Share
More Decks by Alexander Saenko
See All by Alexander Saenko
WWDC2020 Summary
alexandersaenko
0
180
Legacy code - methodology
alexandersaenko
0
64
Экологически чистая разработка
alexandersaenko
0
88
Альманах менеджера
alexandersaenko
0
39
Сам себе режиссер: по ту сторону iOS
alexandersaenko
0
48
Fastlane - App automation done right
alexandersaenko
0
79
Готовим своё хранилище сборок
alexandersaenko
0
47
PDD - Playground Driven Development 👨🏻_💻
alexandersaenko
0
98
Cross-platform UI tests or Say no to Appium
alexandersaenko
0
81
Other Decks in Programming
See All in Programming
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
7.5k
Claude Codeと2つの巻き戻し戦略 / Two Rewind Strategies with Claude Code
fruitriin
0
140
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
Apache Iceberg V3 and migration to V3
tomtanaka
0
170
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
650
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
210
AtCoder Conference 2025
shindannin
0
1.1k
Gemini for developers
meteatamel
0
100
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
180
AgentCoreとHuman in the Loop
har1101
5
240
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
140
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
480
Featured
See All Featured
Unsuck your backbone
ammeep
671
58k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
3.9k
My Coaching Mixtape
mlcsv
0
49
The World Runs on Bad Software
bkeepers
PRO
72
12k
Designing Powerful Visuals for Engaging Learning
tmiket
0
240
We Are The Robots
honzajavorek
0
170
30 Presentation Tips
portentint
PRO
1
220
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
340
Six Lessons from altMBA
skipperchong
29
4.2k
Site-Speed That Sticks
csswizardry
13
1.1k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Transcript
НОРМАЛИЗАЦИЯ СОСТОЯНИЯ Алексей Демедецкий 2019
КЛАССЫ СОСТОЯНИЕ + МЕТОДЫ
БОЛЬШИЕ КЛАССЫ ЭТО ПЛОХО
КОМПОЗИЦИЯ
ГРАФ ОБЪЕКТОВ
ДЕРЕВО ОБЪЕКТОВ
НЕЯВНЫЙ ЖИЗНЕННЫЙ ЦИКЛ
ДУБЛИРОВАНИЕ
РАССОГЛАСОВАННОСТЬ
None
СЛОЖНОСТЬ
ДЕНОРМАЛИЗ ИРОВАНННОЕ
JSON
А КАК ПО ДРУГОМУ?
None
SQL DATABASE
ТОЛЬКО ДАННЫЕ
ГРАФ ДАННЫХ
ИЗОЛИРОВАННЫЕ ТАБЛИЦЫ
ЯВНЫЕ ССЫЛКИ НА ДРУГИЕ ТАБЛИЦЫ
КОНТРОЛЬ ЦЕЛОСТНОСТИ
СКОРОСТЬ ДОСТУПА
МЫ БУДЕМ ДЕЛАТЬ СВОЮ БАЗУ ДАННЫХ?
НЕТ
МЫ БУДЕМ ИСПОЛЬЗОВАТЬ IN MEMORY SQLITE?
НЕТ
CORE DATA?
НЕТ
МЫ ПОСТРОИМ НОРМАЛИЗОВАННОЕ СОСТОЯНИЕ
ПРАВИЛА
ПЛОСКАЯ ЗЕМЛЯ СТРУКТУРА
СИЛЬНЫЕ ИДЕНТИФИКАТОРЫ
ИЗОЛЯЦИЯ КОМПОНЕНТОВ
struct Post { let id: ID let author: User.ID let
comments: [Comment.ID] let text: String struct ID: Hashable { let value: String } }
struct User { let id: ID let posts: [Post.ID] let
comments: [Comment.ID] let name: String let avatar: URL struct ID: Hashable { let value: String } }
struct Comment { let id: ID let author: User.ID let
post: Post.ID let text: String struct ID: Hashable { let value: String } }
struct State { let posts: [Post.ID: Post] let users: [User.ID:
User] let comments: [Comment.ID: Comment] let feed: [Post.ID] let currentUser: User.ID }
ПОМОГАЕТ ИЗБЕЖАТЬ ДУБЛИРОВАНИЯ
ПОМОГАЕТ ИЗБЕЖАТЬ РАССИНХРОНИЗАЦИИ
ОБЕСПЕЧИВАЕТ ЖИЗНЕННЫЙ ЦИКЛ
ОБЩИЕ ДАННЫЕ МЕЖДУ МОДУЛЯМИ
СВЯЗНОСТЬ
ВАХТЁРЫ (GUARDS)
None
RUNTIME TESTS
ТЕПЕРЬ ВЕЗДЕ ID?
ДА
НО...
МОЖНО СДЕЛАТЬ ORM
None
НО ЭТО СОВСЕМ ДРУГАЯ ИСТОРИЯ
СПАСИБО