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
95
0
Share
Укрощение нормализированного состояния
Алексей Демедецкий
Alexander Saenko
September 28, 2019
More Decks by Alexander Saenko
See All by Alexander Saenko
WWDC2020 Summary
alexandersaenko
0
180
Legacy code - methodology
alexandersaenko
0
73
Экологически чистая разработка
alexandersaenko
0
92
Альманах менеджера
alexandersaenko
0
43
Сам себе режиссер: по ту сторону iOS
alexandersaenko
0
49
Fastlane - App automation done right
alexandersaenko
0
85
Готовим своё хранилище сборок
alexandersaenko
0
49
PDD - Playground Driven Development 👨🏻_💻
alexandersaenko
0
100
Cross-platform UI tests or Say no to Appium
alexandersaenko
0
91
Other Decks in Programming
See All in Programming
サークル参加から学ぶ、小さな事業の回し方
yuzneri
0
210
Spec-Driven Development with AI Agents (Workshop, May 2026)
antonarhipov
4
410
AWSはOSSをどのように 考えているのか?
akihisaikeda
0
130
書き換えて学ぶTemporal #fukts
pirosikick
2
380
Modding RubyKaigi for Myself
yui_knk
0
350
空間オーディオの活用
objectiveaudio
0
160
ローカルLLMでどこまでコードが書けるか / How much code can be written on a local LLM
kishida
2
380
「なんか〇〇ライブラリで脆弱性あるみたいなんだけど。。。」から始める脆弱性対応 / First Steps in Vulnerability Response
mackey0225
2
130
TSKaigi2026-静的解析への投資がAI時代のコード品質を支える ── カスタムESLintルールの設計と運用
hayatokudou
4
660
ついに来た!本格的なマルチクラウド時代の Google Cloud
maroon1st
0
470
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
590
Stage 3 Decorators でできること / できないこと / TSKaigi 2026
susisu
1
320
Featured
See All Featured
From π to Pie charts
rasagy
0
180
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
200
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
370
KATA
mclloyd
PRO
35
15k
Docker and Python
trallard
47
3.8k
Ethics towards AI in product and experience design
skipperchong
2
280
How to build a perfect <img>
jonoalderson
1
5.5k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
150
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Building an army of robots
kneath
306
46k
The Cost Of JavaScript in 2023
addyosmani
55
9.9k
Practical Orchestrator
shlominoach
191
11k
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
НО ЭТО СОВСЕМ ДРУГАЯ ИСТОРИЯ
СПАСИБО