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
63
Укрощение нормализированного состояния
Алексей Демедецкий
Alexander Saenko
September 28, 2019
Tweet
Share
More Decks by Alexander Saenko
See All by Alexander Saenko
WWDC2020 Summary
alexandersaenko
0
150
Legacy code - methodology
alexandersaenko
0
41
Экологически чистая разработка
alexandersaenko
0
58
Альманах менеджера
alexandersaenko
0
20
Сам себе режиссер: по ту сторону iOS
alexandersaenko
0
39
Fastlane - App automation done right
alexandersaenko
0
47
Готовим своё хранилище сборок
alexandersaenko
0
26
PDD - Playground Driven Development 👨🏻_💻
alexandersaenko
0
66
Cross-platform UI tests or Say no to Appium
alexandersaenko
0
57
Other Decks in Programming
See All in Programming
命名をリントする
chiroruxx
1
570
なまけものオバケたち -PHP 8.4 に入った新機能の紹介-
tanakahisateru
1
140
Kaigi on Railsに初参加したら、その日にLT登壇が決定した件について
tama50505
0
140
GitHubで育つ コラボレーション文化 : ニフティでのインナーソース挑戦事例 - 2024-12-16 GitHub Universe 2024 Recap in ZOZO
niftycorp
PRO
0
1.1k
Zoneless Testing
rainerhahnekamp
0
150
GitHub CopilotでTypeScriptの コード生成するワザップ
starfish719
26
5.8k
KMP와 kotlinx.rpc로 서버와 클라이언트 동기화
kwakeuijin
0
270
CQRS+ES の力を使って効果を感じる / Feel the effects of using the power of CQRS+ES
seike460
PRO
0
230
どうして手を動かすよりもチーム内のコードレビューを優先するべきなのか
okashoi
3
820
テストケースの名前はどうつけるべきか?
orgachem
PRO
1
180
menu基盤チームによるGoogle Cloudの活用事例~Application Integration, Cloud Tasks編~
yoshifumi_ishikura
0
130
技術的負債と向き合うカイゼン活動を1年続けて分かった "持続可能" なプロダクト開発
yuichiro_serita
0
270
Featured
See All Featured
Docker and Python
trallard
43
3.2k
Designing for Performance
lara
604
68k
Code Reviewing Like a Champion
maltzj
521
39k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Testing 201, or: Great Expectations
jmmastey
41
7.2k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
490
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Building Adaptive Systems
keathley
38
2.3k
Being A Developer After 40
akosma
89
590k
Mobile First: as difficult as doing things right
swwweet
222
9k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
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
НО ЭТО СОВСЕМ ДРУГАЯ ИСТОРИЯ
СПАСИБО