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
190
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
770
От задач к проблемам
dalog
1
250
Unlimited power of Data-Driven UI
dalog
4
630
Data-Driven View Controllers. Tips and Tricks
dalog
5
1.9k
2 years of Redux in iOS. Lessons learned
dalog
0
370
Why unidirectional architecture matter for iOS.
dalog
1
290
Mobile backend without REST
dalog
2
100
Self managed teams 101
dalog
0
150
FMVP
dalog
1
170
Other Decks in Programming
See All in Programming
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
2
210
Go Modules: From Basics to Beyond / Go Modulesの基本とその先へ
kuro_kurorrr
0
120
社内での開発コミュニティ活動とモジュラーモノリス標準化事例のご紹介/xPalette and Introduction of Modular monolith standardization
m4maruyama
1
130
単体テストの始め方/作り方
toms74209200
0
510
来たるべき 8.0 に備えて React 19 新機能と React Router 固有機能の取捨選択とすり合わせを考える
oukayuka
2
810
Spring gRPC で始める gRPC 入門 / Introduction to gRPC with Spring gRPC
mackey0225
2
520
Is Xcode slowly dying out in 2025?
uetyo
1
160
エンジニア向け採用ピッチ資料
inusan
0
140
無関心の谷
kanayannet
0
180
Haskell でアルゴリズムを抽象化する / 関数型言語で競技プログラミング
naoya
17
4.8k
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
1
830
Benchmark
sysong
0
220
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
5.6k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
How to Ace a Technical Interview
jacobian
277
23k
How GitHub (no longer) Works
holman
314
140k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
Six Lessons from altMBA
skipperchong
28
3.8k
For a Future-Friendly Web
brad_frost
179
9.8k
Why Our Code Smells
bkeepers
PRO
337
57k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Agile that works and the tools we love
rasmusluckow
329
21k
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
НО ЭТО СОВСЕМ ДРУГАЯ ИСТОРИЯ
СПАСИБО