Maryna Sokyrko & Oleksandr Chugui: Building Product Passion: Developing AI ch...
Володимир Семенякін “Demiurg. Приручення заліза”
1. Знакомимся
- Год objective-C++ CMK
- Год C++ 4A Games
- Полгода Java SE + EE в Bionic University
- 10 статей, косящих под науку
- Около 15 опубликованных рассказов
- В планах – учиться на режиссёра
2. О чём пойдёт речь
Романтические бредни
Кульбиты идей без кумиров
Сёрфинг на гребнях
абстракции
++11С
ШАБЛОНЫ против
ВИРТУАЛЬНОСТИ
f
Антинаучные размышления
SIM-АРХИТЕКТУРА
Алгоритмы оптимизации*
Динамические библиотеки
Гуманитарное мышление
Умные указатели
DEMIURG
Алгоритмы оптимизации*
Многослойность Модульность
Плагины Низкий уровень
24. Какие-то мысли
Главная задача архитектуры:
Правильное распределение областей
ответственности
Программа как модель Вселенной:
Точное отображение предметной
области
43. Принципы
Упрощение конфигурированияУпрощение конфигурирования
- Простота добавления зависимостей
- Простота переключения между источниками
- Простота контроля версий
Соблюдение «хороших» принциповСоблюдение «хороших» принципов
- Использование контекстной композиции
- Избегание глобальных и статических переменных
- Прозрачность жизненного цикла объектов
44. Window *theWindow = new Window(. . .);
View *theView0 = new View(. . .);
View *theView1 = new View(. . .);
theWindow->contentView()->addSubview(theView0);
theView0->addSubview(theView1);
Использование контекстной композиции
45. Window *theWindow = new Window(. . .);
View *theView0 = new View(. . .);
View *theView1 = new View(. . .);
theWindow->contentView()->addSubview(theView0);
theView0->addSubview(theView1);
Использование контекстной композиции
46. Window *theWindow = new Window(. . .);
View *theView0 = new View(. . .);
View *theView1 = new View(. . .);
theWindow->contentView()->addSubview(theView0);
theView0->addSubview(theView1);
Window *theWindow = new Window(. . .);
View *theView0 = theWindow->contentView()->
createSubview(. . .);
View *theView1 = theView0->createSubview(. . .);
Использование контекстной композиции
47. Window *theWindow = new Window(. . .);
View *theView0 = new View(. . .);
View *theView1 = new View(. . .);
theWindow->contentView()->addSubview(theView0);
theView0->addSubview(theView1);
Window *theWindow = new Window(. . .);
View *theView0 = theWindow->contentView()->
createSubview(. . .);
View *theView1 = theView0->createSubview(. . .);
Использование контекстной композиции
48. Window *theWindow = new Window(. . .);
View *theView0 = new View(. . .);
View *theView1 = new View(. . .);
theWindow->contentView()->addSubview(theView0);
theView0->addSubview(theView1);
Window *theWindow = new Window(. . .);
View *theView0 = theWindow->contentView()->
createSubview(. . .);
View *theView1 = theView0->createSubview(. . .);
Использование контекстной композиции
49. Window *theWindow = new Window(. . .);
View *theView0 = theWindow->contentView()->
createSubview(. . .);
View *theView1 = theView0->createSubview(. . .);
Прозрачность использования ресурсов
77. Контексты
- Контролёр взаимодействия объектов
Контекст – это:
- Фабрика объектов
- Интерфейс библиотеки
- Точка доступа к окружению
- «Система» в прототипном подходе
83. Один раз написано. Компилируется везде
Внутренние реализации
Уровень интерфейсных связокУровень интерфейсных связок
Уровень реализацийУровень реализаций
Уровень прикладного кодаУровень прикладного кода
Упрощение связывания с реализациями
Связки
Что-то вроде Spring
84. DPlugInHolder Контроль жизненного цикла
плагина с учётом специфики
места его хранения
DPlugIn Реализация функционала
Решение зависимостей между
плагинами
Инъекция зависимостей
Минимальное описание
собственных зависимостей
DPlugInManager
Плагины