D7: проектирование и реализация нового модуля «Диск»
-
Upload
murphy-waters -
Category
Documents
-
view
73 -
download
0
description
Transcript of D7: проектирование и реализация нового модуля «Диск»
![Page 1: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/1.jpg)
D7: проектирование и реализация нового модуля «Диск»
Алексей КирсановВедущий программист
«1С-Битрикс»
![Page 2: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/2.jpg)
Новое ядро D7
• Новая идеология разработки
• отказ от устаревших моделей
• современные технологии, современный php
• ООП
• сильное зацепление и слабая связанность
• нетерпимость к ошибкам
• Совместная работа старой и новой платформы. Постепенная миграция.
• Новая библиотека классов
• Обновленный жизненный цикл
![Page 3: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/3.jpg)
Модуль «Битрикс24.Диск»• Замена файл-серверу, совместная работа с
файлами
• Текущий модуль Битрикс24.Диск (webdav)
• Цели нового модуля Битрикс24.Диск (disk)
• Повышение производительности
• Интеграция в другие сущности
• Повышение устойчивости работы
• Качественный АПИ
• Работа с большими объемами
![Page 4: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/4.jpg)
Архитектура модуля D7
БД ORMБизнес-логика
Компо-ненты
ДанныеДействия
над данными
Логика Интерфейс
![Page 5: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/5.jpg)
Структура БД модуля «Диск»
• Отдельные таблицы (не инфоблоки)
• Нормализация
• Быстрое дерево по шаблону «Таблица связей», относительно устойчивое к ошибкам при изменении структуры
• Вынужденная денормализация в узких местах (права на чтение)
![Page 6: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/6.jpg)
ORM
• CRUD + Query Object
• Репозиторий – фасад (промежуточный слой) между бизнес-логикой и данными
• События
• Нет объектов
![Page 7: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/7.jpg)
Генерирование классов ORM
• Генератор ORM в разделе «Таблицы»
• Редактирование классов ORM: единый базовый класс для файлов и папок
![Page 8: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/8.jpg)
Архитектура модуля D7
БД ORMБизнес-логика
Компо-ненты
ДанныеДействия
над данными
Логика Интерфейс
![Page 9: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/9.jpg)
Шаблоны работы с данными• ActiveRecord
• Плюсы: писать код легко, сохранение в одном месте
• Минусы: нарушает принцип одной ответственности в SOLID, сложное изменение места хранения данных
• DataMapper
• Плюсы: соблюдается принцип одной ответственности SOLID, легко поменять место хранения
• Минусы: усложнение кода
• Unit of WorkSOLID – принципы одной обязанности, открытости/закрытости, подстановки, разделения интерфейсов и инверсии зависимостей
![Page 10: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/10.jpg)
Парадигмы программирования• Ориентация на данные (Data Driven Design)
• Главное – данные, а не связи между ними
• Плюсы: скорость разработки, простота использования и внедрения
• Минусы: хуже согласуется с концепциями ООП, сложнее поддержка и может привести к хаосу при росте проекта
• Ориентация на бизнес-логику (Domain Driven Design - DDD)
• Главное – предметная область, объекты, связи и зависимости
• Плюсы: полностью ООП, мощный инструмент для развития и поддержки большого проекта
• Минусы: гораздо сложнее в реализации
![Page 11: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/11.jpg)
Варианты для нас: №1• Ориентация на данные и ORM
• ORM – часть бизнес-логики, стандартные CRUD для работы в рамках бизнес-логики
• Плюсы: полностью стандартные CRUD, простота реализации, стандартные события
• Минусы: оперируем не целями, а средствами; потенциально более длинный код; сложно удержать проект от распухания и хаоса при существенном росте.
![Page 12: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/12.jpg)
Варианты для нас: №2• Ориентация на данные, но не на ORM
• ORM – репозиторий, т.е. прокси (промежуточный слой) между бизнес-логикой и данными, т.е. внутренний механизм
• Плюсы: потенциально более компактный код, оперируем целями, АПИ настроен на конкретную задачу, не на много сложнее в реализации
• Минусы: нет единообразия в CRUD, в событиях, разный АПИ в разных модулях (но можно ввести общие базовые принципы), сложно удержать проект от распухания и хаоса при существенном росте.
![Page 13: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/13.jpg)
Варианты для нас: №3• Ориентация на бизнес-логику
• ORM – репозиторий, т.е. прокси (промежуточный слой) между бизнес-логикой и данными
• Плюсы: полное ООП, потенциально проще развитие и поддержка, потенциально более компактный код, оперируем целями, АПИ настроен на конкретную задачу
• Минусы: разный АПИ в разных модулях (но можно ввести общие базовые принципы), существенно сложнее в реализации
![Page 14: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/14.jpg)
Варианты для нас: №4• Смешанный вариант
• Модульная система, где необходимо – бизнес-логика, в остальных местах – данные
• Плюсы: просто там, где не надо сложно; мощно там, где нужна мощность
• Минусы: нет единообразия в подходах к решению задачи
![Page 15: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/15.jpg)
Бизнес-логика модуля «Диск»
• Модуль для обкатки технологий
Абстрактный
класс модели
File
Folder
Абстрактный класс
DataManager
БД FileTable
FolderTable
• ActiveRecord, в котором источниками данных являются DataManager (Table)
![Page 16: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/16.jpg)
Безопасность в «Диске»
• Наследуемые права, возможность отмены прав на любом уровне
• Проверка прав – вне АПИ
• Проблема выборки с проверкой прав
• Контекст безопасности – провайдер прав
• canRead, canRename и т.п.
• SqlExpression для списочных выборок
![Page 17: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/17.jpg)
Компоненты
• Компонент-класс, наследование
• Базовые классы
• Паттерн проектирования «Шаблонный метод»
• Шаблон в базовом компоненте
• Каждый запуск компонента – выполнение действия
• Стандартные ответы
• Стандартная обработка ошибок
![Page 18: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/18.jpg)
Компонент: жизненный цикл
• Жизненный цикл компонента
1. Узнать, какое действие сейчас требуется выполнить
2. Подключить необходимые модули и сервисы (учитывая действие)
3. Подготовить параметры, проверить их корректность (учитывая действие)
4. Общий код компонента, который нужен перед всеми действиями (например, инициализация файлового хранилища)
5. Выполнение самого действия
![Page 19: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/19.jpg)
Компонент: действия
• В конкретном компоненте просто определяются конкретные шаги - действия
![Page 20: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/20.jpg)
Полученные результаты• Скорость построения снапшота (снимка
файловой системы)
• webdav - 1.1 сек, 23 Мб памяти
• диск - 0.13 сек, 3.5 Мб памяти
• Успешно синхронизируется дистрибутив Битрикс с демо-данными (порядка 50000 файлов и папок)
• Возможность интеграции в другие сущности
• Возможность организации произвольных хранилищ с произвольными правилами доступа
• Новый удобный АПИ
![Page 21: D7: проектирование и реализация нового модуля «Диск»](https://reader035.fdocuments.net/reader035/viewer/2022081503/568131a8550346895d981594/html5/thumbnails/21.jpg)
Спасибо за внимание! Вопросы?