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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Alexander Saenko
September 28, 2019
Programming
0
95
Укрощение нормализированного состояния
Алексей Демедецкий
Alexander Saenko
September 28, 2019
Tweet
Share
More Decks by Alexander Saenko
See All by Alexander Saenko
WWDC2020 Summary
alexandersaenko
0
180
Legacy code - methodology
alexandersaenko
0
66
Экологически чистая разработка
alexandersaenko
0
90
Альманах менеджера
alexandersaenko
0
41
Сам себе режиссер: по ту сторону iOS
alexandersaenko
0
48
Fastlane - App automation done right
alexandersaenko
0
81
Готовим своё хранилище сборок
alexandersaenko
0
48
PDD - Playground Driven Development 👨🏻_💻
alexandersaenko
0
99
Cross-platform UI tests or Say no to Appium
alexandersaenko
0
84
Other Decks in Programming
See All in Programming
RubyとGoでゼロから作る証券システム: 高信頼性が求められるシステムのコードの外側にある設計と運用のリアル
free_world21
0
200
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
370
AHC061解説
shun_pi
0
310
クライアントワークでSREをするということ。あるいは事業会社におけるSREと同じこと・違うこと
nnaka2992
1
300
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
510
米国のサイバーセキュリティタイムラインと見る Goの暗号パッケージの進化
tomtwinkle
2
410
Claude Code、ちょっとした工夫で開発体験が変わる
tigertora7571
0
200
nilとは何か 〜interfaceの構造とnil!=nilから理解する〜
kuro_kurorrr
3
1.6k
JPUG勉強会 OSSデータベースの内部構造を理解しよう
oga5
2
230
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
390
AI主導でFastAPIのWebサービスを作るときに 人間が構造化すべき境界線
okajun35
0
510
エージェント開発初心者の僕がエージェントを作った話と今後やりたいこと
thasu0123
0
230
Featured
See All Featured
Statistics for Hackers
jakevdp
799
230k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Abbi's Birthday
coloredviolet
2
5.1k
Building AI with AI
inesmontani
PRO
1
760
Leo the Paperboy
mayatellez
4
1.5k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
620
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
970
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
280
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
230
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
60
42k
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
НО ЭТО СОВСЕМ ДРУГАЯ ИСТОРИЯ
СПАСИБО