Владимир Никонов "Вызовы при разработке enterprise...
TRANSCRIPT
Вызовы при разработке enterprise продуктаНиконов ВладимирTerrasoft
Особенности enterprise
• Продукт = основа бизнеса• Размер• Поддержка пользователей и жизненный цикл продукта
Основа бизнеса
• Скорость• Стоимость• Стабильность
SCRUM
SCRUM & ENTERPRISE (SAFe)
Поддержка
Развитие технологий
• Постоянно• Лавинообразно• Имеет конкурентную природу
Релизы
• 16 релизов за 6 лет• частота обновления 2011 - 2015 – 3 раза в год (200+
клиентов)• частота обновления 2016 - 2017 – 1 раз в месяц (600+
клиентов)
Software engineer
• Programmer• Tester• System Administrator• DevOps• Software engineer
Задачи платформы
• В приложении существует возможность создать бизнес-процессы • Приложение позволяет быстро создавать UI и новые сущности• Реализовать базовая бизнес-функциональность• Реализовать возможность изменять/расширять функциональность
Часть 1: Начало
Фундамент
• C# - основной язык разработки• Реализация собственного UI• Silverlight для реализации сложных компонент• Дизайнеры системы• Реализация возможностей “на вырост”• Solution = 50+ проектов• Собственный ORM• Динамическая генерация кода для настроек пользователя
ASP.Net WebForm
Компоненты
KISS
• Init• Load• Complete• <Event>
Бизнес логика
ASP.Net WebForm
+•Привычный UX•Возможность доработок
-•Объём работ•Асинхронность событий•Время отклика
Дизайнер страниц
Дизайнер объектов
Дизайнер бизнес процессов
Схемы
• Разделение метаданных и кода• Дизайнеры работают с метаданными• Генераторы преобразовывают метаданные в код который
используется в runtime • Генераторы опираются на атрибуты а не конкретные
классы
Дизайнеры
+•Простота понимания•Скорость разработки•Фундамент для расширяемости
-•Сложность дизайнера•Возможность расширения•Поддержка бизнес кода
YAGNI
• Наследование 1 - 1• Поддержка enum• Механизм вычисляемых колонок• Списки изображений• Локализированные изображения• Системы резервного восстановления
50 проектов
• 5 крупных архитектурных изменений за 6 лет• 70% механизмов, созданных на старте работают• Собственный ORM не является проблемой
Динамическая компиляция
• Все доработки клиентов попадают в сборку в момент применения изменений
• Сервис динамической компиляции отчётов
Обновление клиентов
• Трансформация БД• Трансформация метаданных
Выводы
• KISS & YAGNI• Риски тех.долга• Храните намерения а не результаты
Часть 2: Рост
Проблемы• Невозможность выгрузки assembly из памяти• Конфликты разных версий библиотек• Превышение максимального количества строк в одной
assembly• Невозможность использование стандартных конструкций
языка
Решения
• Разделение рабочих пространств на отдельные приложения
• Использование сервера хранения сессий (redis)• Переработка генераторов• Создание нового типа схемы – SourceCode (чистый C#)• Использование фабрики с возможностью управлять
маппингом через атрибуты
Часть 3: SPA + Пакеты
Задачи
• UX• Скорость отклика интерфейса• Обновление клиентов• Длительное время компиляции• Сложная иерархическая структура рабочих пространств
Решение
• Полное разделение frontend-a и backend-a (AMD + MVVM + JS)
• Реализация возможности создания собственных web сервисов
• ROS сервисы• Физическое разделение кода по пакетам• Компиляция через .net модули с автоматической
разбивкой классов• Все рабочие пространства системы реализованы
отдельными приложениями и равноправны
Часть 4: SPA v2
Шахматка
DIFF & APPLY
• Любой объект может быть получен из пустого путем конечного количества изменений (insert, set, merge, delete) применённых последовательно
• Изменения представляют собой элементарные операции• Изменения хранятся в виде плоского массива• Механизм применения изменений учитывает не только
порядок изменений в массиве но тип операций
Часть 5: Облачные сервисы
Email рассылки
• Реализация независимого headless приложения• Percona• RabbitMQ• Двухсторонняя интеграция c CRM
• Внедрение систем сборки и тестирования для разработки• Интеграция с системой ведения релизов• Реализация механизмов и регламентов поставки
изменений в облако
Часть 6: Continuous Integration
Автоматизация• Тестирования• Контроля
Тесты
Контроль
Контроль
• SonarQube• PVS• FxCop• StyleCop
Часть 7: Ускорение
Development & Runtime
• Стандартный стек инструментов для каждого типа задач• C#• JavaScript
• SOA как инструмент горизонтального роста• Разделение данных и метаданных
Часть 8: Завтра
Часть 8: Завтра• MPP• Big Data• AI• Оркестрация
Заключение
• Изменения требований и ошибки реализации – процессы которые не кончаются
• Скорость разработки и доставки изменений не должны зависеть от размера приложения
• Идеи в которые вы инвестировали сегодня, завтра станут вашим фундаментом