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
54
Укрощение нормализированного состояния
Алексей Демедецкий
Alexander Saenko
September 28, 2019
Tweet
Share
More Decks by Alexander Saenko
See All by Alexander Saenko
WWDC2020 Summary
alexandersaenko
0
130
Legacy code - methodology
alexandersaenko
0
35
Экологически чистая разработка
alexandersaenko
0
41
Альманах менеджера
alexandersaenko
0
19
Сам себе режиссер: по ту сторону iOS
alexandersaenko
0
35
Fastlane - App automation done right
alexandersaenko
0
36
Готовим своё хранилище сборок
alexandersaenko
0
22
PDD - Playground Driven Development 👨🏻_💻
alexandersaenko
0
44
Cross-platform UI tests or Say no to Appium
alexandersaenko
0
41
Other Decks in Programming
See All in Programming
敵対的ポイフル
futabato
0
130
Deep Dive into React Stream/Serialize
mugi_uno
3
660
雑に思考を整理する技術と効能
konifar
63
30k
Git Lint
bkuhlmann
4
760
Three ways to use AI on Android: The Good, the Bad and the Ugly
marxallski
0
110
Next.js App Router
quramy
12
1.8k
PostmanでAPIの動作確認が楽になった話
h455h1
0
180
Goのエラースタックトレースの歴史と今後
sonatard
10
1.8k
Try creating your own orderedmap
kazamori
1
190
CREってこういうこと? 体験入社 - 提案資料 - / what-is-cre-trial-employment
shinden
1
510
MicrosoftのPlatform Engineeringガイドを読んで実際になにかやってみた
ymd65536
1
500
禅の心を手に入れよ
eltociear
1
330
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Bash Introduction
62gerente
605
210k
The Straight Up "How To Draw Better" Workshop
denniskardys
228
130k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
117
18k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
323
20k
Building Better People: How to give real-time feedback that sticks.
wjessup
356
18k
Six Lessons from altMBA
skipperchong
22
3k
Infographics Made Easy
chrislema
238
18k
Raft: Consensus for Rubyists
vanstee
133
6.3k
The Brand Is Dead. Long Live the Brand.
mthomps
49
29k
Writing Fast Ruby
sferik
622
60k
The Art of Programming - Codeland 2020
erikaheidi
43
12k
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
НО ЭТО СОВСЕМ ДРУГАЯ ИСТОРИЯ
СПАСИБО