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
160
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
610
Data-Driven View Controllers. Tips and Tricks
dalog
5
1.8k
2 years of Redux in iOS. Lessons learned
dalog
0
340
Why unidirectional architecture matter for iOS.
dalog
1
270
Mobile backend without REST
dalog
2
88
Self managed teams 101
dalog
0
130
FMVP
dalog
1
160
Other Decks in Programming
See All in Programming
たのしいSocketのしくみ / Socket Under a Microscope
coe401_
8
1.4k
自力でTTSモデルを作った話
zgock999
0
120
dbt Pythonモデルで実現するSnowflake活用術
trsnium
0
270
Drawing Heighway’s Dragon- Recursive Function Rewrite- From Imperative Style in Pascal 64 To Functional Style in Scala 3
philipschwarz
PRO
0
150
color-scheme: light dark; を完全に理解する
uhyo
7
500
新宿駅構内を三人称視点で探索してみる
satoshi7190
2
120
Django NinjaによるAPI開発の効率化とリプレースの実践
kashewnuts
1
290
Boos Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
590
Jasprが凄い話
hyshu
0
180
Kotlinの開発でも AIをいい感じに使いたい / Making the Most of AI in Kotlin Development
kohii00
5
1.8k
ABEMA iOS 大規模プロジェクトにおける段階的な技術刷新 / ABEMA iOS Technology Upgrade
akkyie
1
240
苦しいTiDBへの移行を乗り越えて快適な運用を目指す
leveragestech
0
1.2k
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
Facilitating Awesome Meetings
lara
53
6.3k
Testing 201, or: Great Expectations
jmmastey
42
7.2k
Documentation Writing (for coders)
carmenintech
68
4.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Making Projects Easy
brettharned
116
6k
Site-Speed That Sticks
csswizardry
4
420
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Designing for Performance
lara
605
68k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
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
НО ЭТО СОВСЕМ ДРУГАЯ ИСТОРИЯ
СПАСИБО