Upload
anna-tarasenko
View
119
Download
0
Embed Size (px)
Citation preview
Архитектура в web – грабли, боль
или красота
Анна Тарасенко,7bits
Типы web-проектов• Контентные: Instagram, twitter,
habrahabr
• Интернет-магазины
• Бизнес-приложения: автоматизация процессов
• Распределенные сервисы: RTB, картография, поиск, анализ метаданных, телекоммуникации
ХарактеристикиКонтентные Магазин
ыБизнес RTB,
поиск
Объем данных ++++ +++ ++ +++++++
Число пользователей
+++++ +++ ++ ++
Число запросов
++++++ ++++ +++ +++++++
Время отклика ++ +++ ++++ +
Публичность +++ +++ -/+ -/+
Стоимость разработки
++ + +++++ +++++
Надежность хранения данных
+ +++ +++ ++
Сложность логики
+ ++ +++++ +++++
Контентные сайты• Content management system (CMS) –
Drupal, Wordpress, Joomla и т.д.
• Много серверов, много файлов (видео, аудио) по сравнению с объемом данных в БД
• Кэширование контента, пользователи не терпят задержек
• Тюнинг за счет инфраструктуры
Магазины
• Специализированные CMS, интеграция с бухгалтерскими и складскими системами
• Работа с финансовыми транзакциями
• Пользователи лояльнее к времени открытия страницы
• Многое как в контентных сайтах
Бизнес-приложения• Web-фреймворки: PHP, Ruby, Python,
Java, C#
• Данные в SQL БД, один сервер БД, один сервер приложения
• Пользователи часто корпоративные или лояльны к интерфейсу и задержкам ради функций
• Тюнинг за счет асинхронных задач, оптимизации алгоритмов
RTB, поиск и т.д.
• Сервисы без интерфейсов: Java, C++ и т.д.
• NoSQL БД, специальные файловые системы
• «Пользователи» – внешние системы
• Тюнинг за счет оптимизации алгоритмов, MapReduce, оптимизации хранения данных
АрхитектураОпределяющие вещи (по убыванию сложности изменения):
• Предметная область
• Слои абстракции
• Протоколы взаимодействия
• Структура хранения данных
Архитектура – это то, что сложнее всего
поменять в проекте
Слои по Э. Эвансу
• Интерфейс пользователя (UI)
• Уровень приложения (Application layer)
• Уровень предметной области (Domain layer)
• Инфраструктурный уровень (Infrastructure layer)
Инфраструктура
• Хранение данных (Persistence): БД, файловая система
• Службы рассылки email, sms и т.д.
• Логгирование и мониторинг
• Очереди задач, кэширование данных и страниц
UI
• Шаблоны для отображения: HTML + JS и вот это все
• Представление в виде документов
• Локализация и интернационализация
• Usability
Уровень приложения
Основной объект – контроллеры:• Принимают данные от слоя бизнес-
логики, выбирают отображение
• Управляют службами инфраструктурного уровня (иногда кроме слоя хранения)
• Управляют правами доступа и протоколами безопасности
Предметная область
• Изолирована от специфики хранения данных
• Изолирована от специфики приложения: web, консоль, десктоп
• Манипулирует сущностями (Entities) и объектами-значениями (Value objects)
• Содержит слой сервисов для работы с бизнес-правилами (Business rules)
Кому нужна бизнес-логика?
По типам проектов
• Контентные и Интернет-магазины: вся логика в CMS, нужно заниматься в основном инфраструктурой
• Распределенные сервисы: в основном логика в поиске закономерностей в больших объемах данных
• Бизнес-приложения: вся основа – в предметной области
Подход к разработке бизнес-приложений: Domain Driven Design
(DDD)
Суть DDD
Типы объектов:
• Entity – сущность, объект обладающий уникальным существованием
• Value object – объект-значение, не является уникальным, много копий в системе
Суть DDD
Типы объектов:
• Service – не представляет реальный объект, манипулирует сущностями, реализует бизнес-правила. На стыке с уровнем приложения
• Repository – хранилище объектов. На стыке с инфраструктурным слоем
Пример: формирование human
readable date
Пример: рассылка email о событии
Пример: формирование исключения об
отсутствии прав на объект
Пример: изменение статуса сущности
Где нужны web-фреймворки?
Литература• Стивен МакКоннел. «Совершенный
код»
• Мартин Фаулер. «Архитектура корпоративных программных приложений»
• Эрик Эванс. «Предметно-ориентированное проектирование»
• Джоэл Спольски. «Джоэл о программировании», «Джоэл снова о программировании»