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
State normalization (RU)
Search
DAloG
September 28, 2019
Programming
0
170
State normalization (RU)
https://gist.github.com/AlexeyDemedetskiy/725e50bf0beb0d0946ac559a4faba227
DAloG
September 28, 2019
Tweet
Share
More Decks by DAloG
See All by DAloG
Redux + MQTT
dalog
1
760
От задач к проблемам
dalog
1
230
Unlimited power of Data-Driven UI
dalog
4
620
Data-Driven View Controllers. Tips and Tricks
dalog
5
1.9k
2 years of Redux in iOS. Lessons learned
dalog
0
350
Why unidirectional architecture matter for iOS.
dalog
1
280
Mobile backend without REST
dalog
2
92
Self managed teams 101
dalog
0
130
FMVP
dalog
1
160
Other Decks in Programming
See All in Programming
DataStoreをテストする
mkeeda
0
280
custom_lintで始めるチームルール管理
akaboshinit
0
200
Building Scalable Mobile Projects: Fast Builds, High Reusability and Clear Ownership
cyrilmottier
2
250
新しいPHP拡張モジュールインストール方法「PHP Installer for Extensions (PIE)」を使ってみよう!
cocoeyes02
0
330
Boost Your Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
1.2k
Building a macOS screen saver with Kotlin (Android Makers 2025)
zsmb
1
140
AHC 044 混合整数計画ソルバー解法
kiri8128
0
320
新卒から4年間、20年もののWebサービスと 向き合って学んだソフトウェア考古学
oguri
8
7.2k
SQL Server ベクトル検索
odashinsuke
0
160
AWS で実現する安全な AI エージェントの作り方 〜 Bedrock Engineer の実装例を添えて 〜 / how-to-build-secure-ai-agents
gawa
8
690
Signal-Based Data FetchingWith the New httpResource
manfredsteyer
PRO
0
160
MCP世界への招待: AIエンジニアが創る次世代エージェント連携の世界
gunta
4
880
Featured
See All Featured
How to Ace a Technical Interview
jacobian
276
23k
Making the Leap to Tech Lead
cromwellryan
133
9.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.3k
Designing for Performance
lara
607
69k
Speed Design
sergeychernyshev
29
880
A Tale of Four Properties
chriscoyier
158
23k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
119
51k
Gamification - CAS2011
davidbonilla
81
5.2k
Documentation Writing (for coders)
carmenintech
69
4.7k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
The Cost Of JavaScript in 2023
addyosmani
49
7.7k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.1k
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
НО ЭТО СОВСЕМ ДРУГАЯ ИСТОРИЯ
СПАСИБО