В докладе мы рассмотрим этапы развития приложения, начиная от монолитного Web приложения, до распределенной платформы по управлению бизнес-процессами. Покажем этапы развития, задачи и вызовы, которые возникали на каждом их них. Проанализируем различные аспекты, влияющие на развитие архитектуры, такие как бизнес-требования, технологические тренды и возможные ограничения.
8. Релизы
• 16 релизов за 6 лет
• частота обновления 2011 - 2015 – 3 раза в год (200+ клиентов)
• частота обновления 2016 - 2017 – 1 раз в месяц (600+ клиентов)
10. Задачи платформы
• В приложении существует возможность создать бизнес-процессы
• Приложение позволяет быстро создавать UI и новые сущности
• Реализовать базовая бизнес-функциональность
• Реализовать возможность изменять/расширять функциональность
12. Фундамент
• C# - основной язык разработки
• Реализация собственного UI
• Silverlight для реализации сложных компонент
• Дизайнеры системы
• Реализация возможностей “на вырост”
• Solution = 50+ проектов
• Собственный ORM
• Динамическая генерация кода для настроек пользователя
21. Схемы
• Разделение метаданных и кода
• Дизайнеры работают с метаданными
• Генераторы преобразовывают метаданные в код который
используется в runtime
• Генераторы опираются на атрибуты а не конкретные классы
23. YAGNI
• Наследование 1 - 1
• Поддержка enum
• Механизм вычисляемых колонок
• Списки изображений
• Локализированные изображения
• Системы резервного восстановления
24. 50 проектов
• 5 крупных архитектурных изменений за 6 лет
• 70% механизмов, созданных на старте работают
• Собственный ORM не является проблемой
25. Динамическая компиляция
• Все доработки клиентов попадают в сборку в момент применения
изменений
• Сервис динамической компиляции отчётов
29. Проблемы
• Невозможность выгрузки assembly из памяти
• Конфликты разных версий библиотек
• Превышение максимального количества строк в одной assembly
• Невозможность использование стандартных конструкций языка
30. Решения
• Разделение рабочих пространств на отдельные приложения
• Использование сервера хранения сессий (redis)
• Переработка генераторов
• Создание нового типа схемы – SourceCode (чистый C#)
• Использование фабрики с возможностью управлять маппингом
через атрибуты
32. Задачи
• UX
• Скорость отклика интерфейса
• Обновление клиентов
• Длительное время компиляции
• Сложная иерархическая структура рабочих пространств
33. Решение
• Полное разделение frontend-a и backend-a (AMD + MVVM + JS)
• Реализация возможности создания собственных web сервисов
• ROS сервисы
• Физическое разделение кода по пакетам
• Компиляция через .net модули с автоматической разбивкой классов
• Все рабочие пространства системы реализованы отдельными
приложениями и равноправны
36. DIFF & APPLY
• Любой объект может быть получен из пустого путем конечного
количества изменений (insert, set, merge, delete) применённых
последовательно
• Изменения представляют собой элементарные операции
• Изменения хранятся в виде плоского массива
• Механизм применения изменений учитывает не только порядок
изменений в массиве но тип операций
38. Email рассылки
• Реализация независимого headless приложения
• Percona
• RabbitMQ
• Двухсторонняя интеграция c CRM
• Внедрение систем сборки и тестирования для разработки
• Интеграция с системой ведения релизов
• Реализация механизмов и регламентов поставки изменений в
облако
45. Development & Runtime
• Стандартный стек инструментов для каждого типа задач
• C#
• JavaScript
• SOA как инструмент горизонтального роста
• Разделение данных и метаданных
48. Заключение
• Изменения требований и ошибки реализации – процессы которые
не кончаются
• Скорость разработки и доставки изменений не должны зависеть от
размера приложения
• Идеи в которые вы инвестировали сегодня, завтра станут вашим
фундаментом