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
82
Укрощение нормализированного состояния
Алексей Демедецкий
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
75
Альманах менеджера
alexandersaenko
0
30
Сам себе режиссер: по ту сторону iOS
alexandersaenko
0
45
Fastlane - App automation done right
alexandersaenko
0
65
Готовим своё хранилище сборок
alexandersaenko
0
41
PDD - Playground Driven Development 👨🏻_💻
alexandersaenko
0
84
Cross-platform UI tests or Say no to Appium
alexandersaenko
0
70
Other Decks in Programming
See All in Programming
フロントエンドのmonorepo化と責務分離のリアーキテクト
kajitack
2
150
AI時代に学習する意味はあるのか?
tomoyakamaji
0
100
Processing Gem ベースの、2D レトロゲームエンジンの開発
tokujiros
2
110
TDD 実践ミニトーク
contour_gara
1
260
TROCCO×dbtで実現する人にもAIにもやさしいデータ基盤
nealle
0
390
マイコンでもRustのtestがしたい その2/KernelVM Tokyo 18
tnishinaga
2
2.4k
速いWebフレームワークを作る
yusukebe
2
330
詳解!defer panic recover のしくみ / Understanding defer, panic, and recover
convto
0
200
複雑なドメインに挑む.pdf
yukisakai1225
2
260
Claude Codeで挑むOSSコントリビュート
eycjur
0
190
20250808_AIAgent勉強会_ClaudeCodeデータ分析の実運用〜競馬を題材に回収率100%の先を目指すメソッドとは〜
kkakeru
0
210
パッケージ設計の黒魔術/Kyoto.go#63
lufia
3
370
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Six Lessons from altMBA
skipperchong
28
4k
Writing Fast Ruby
sferik
628
62k
The Art of Programming - Codeland 2020
erikaheidi
55
13k
We Have a Design System, Now What?
morganepeng
53
7.8k
BBQ
matthewcrist
89
9.8k
The Language of Interfaces
destraynor
160
25k
Automating Front-end Workflow
addyosmani
1370
200k
Documentation Writing (for coders)
carmenintech
73
5k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
570
Git: the NoSQL Database
bkeepers
PRO
431
66k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.9k
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
НО ЭТО СОВСЕМ ДРУГАЯ ИСТОРИЯ
СПАСИБО