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
83
Укрощение нормализированного состояния
Алексей Демедецкий
Alexander Saenko
September 28, 2019
Tweet
Share
More Decks by Alexander Saenko
See All by Alexander Saenko
WWDC2020 Summary
alexandersaenko
0
170
Legacy code - methodology
alexandersaenko
0
49
Экологически чистая разработка
alexandersaenko
0
76
Альманах менеджера
alexandersaenko
0
30
Сам себе режиссер: по ту сторону iOS
alexandersaenko
0
45
Fastlane - App automation done right
alexandersaenko
0
66
Готовим своё хранилище сборок
alexandersaenko
0
42
PDD - Playground Driven Development 👨🏻_💻
alexandersaenko
0
85
Cross-platform UI tests or Say no to Appium
alexandersaenko
0
71
Other Decks in Programming
See All in Programming
意外と簡単!?フロントエンドでパスキー認証を実現する WebAuthn
teamlab
PRO
2
760
ユーザーも開発者も悩ませない TV アプリ開発 ~Compose の内部実装から学ぶフォーカス制御~
taked137
0
180
1から理解するWeb Push
dora1998
7
1.9k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
380
print("Hello, World")
eddie
2
530
Kiroで始めるAI-DLC
kaonash
2
590
Amazon RDS 向けに提供されている MCP Server と仕組みを調べてみた/jawsug-okayama-2025-aurora-mcp
takahashiikki
1
110
@Environment(\.keyPath)那么好我不允许你们不知道! / atEnvironment keyPath is so good and you should know it!
lovee
0
120
Zendeskのチケットを Amazon Bedrockで 解析した
ryokosuge
3
310
今から始めるClaude Code入門〜AIコーディングエージェントの歴史と導入〜
nokomoro3
0
180
Laravel Boost 超入門
fire_arlo
3
220
アセットのコンパイルについて
ojun9
0
130
Featured
See All Featured
Code Review Best Practice
trishagee
70
19k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
How STYLIGHT went responsive
nonsquared
100
5.8k
Six Lessons from altMBA
skipperchong
28
4k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Designing for Performance
lara
610
69k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
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
НО ЭТО СОВСЕМ ДРУГАЯ ИСТОРИЯ
СПАСИБО