Гатиятов Руслан, технический директор ООО “Дроид...

29

Upload: provectus

Post on 16-Jun-2015

177 views

Category:

Documents


2 download

DESCRIPTION

Web Expert Day (20.09.14) Kazan, Russia

TRANSCRIPT

Page 1: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура
Page 2: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

История создания продукта

http://workmateapp.com

http://planiro.com

Workmate

Planiro

Page 3: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Аудитория продукта

Page 4: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Связанность данных

Page 5: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Требования к системе

1) Task-based UI!2) Отзывчивость!3) Простота!4) Масштабируемость!5) Расширяемость!6) Real-time updates

Page 6: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Технологии

1. Ruby 2.1.x, Rails 4.1.x 2. Postgres 3. Coffescript, AngularJS 4. Slim, SASS(SCSS) 5. RabbitMQ 6. Тестирование Rspec

Page 7: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Архитектура приложений

Чем помогает архитектура?>!1) понятность кода и предметной области 2) модульность приложения: чем больше система, тем легче добавить новый компонент системы 3) масштабируемость приложения !Архитектура приложений - это> 1) принятые ключевые решения 2) компромисс !!

Page 8: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Выбор архитектуры для Planiro!

!Workmate - monolithic data centric architecture !Плюсы: 1) низкий порог вхождения 2) отлично подходит для CRUD приложений

!!

!Проблемы: 1) высокая связанность компонентов приложения 2) низкая связность отдельных моделей 3) DB-driven разработка -> сложно увидеть предметную область 4) сложность масштабирования !!!

Page 9: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Выбор архитектуры для Planiro!

!Planiro - Multilayered event driven architecture with SOA !Плюсы: 1) все сервисы автономны и имеют выраженные границы -> высокая

связность моделей и низкая связанность модулей 2) масштабируемость и распределенность 3) единый протокол взаимодействия !Проблемы: 1) выше порог вхождения 2) большое количетво модулей и классов 3) разработка немного медленнее на начальном этапе !!!!

Page 10: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Domain Driven DesignДомен - это совокупность знаний о предметной области !1) Доменная модель 2) Единый язык (ubiquitous language) 3) Bounded context

1) Entity - an object that is not defined by its attributes, but rather by a thread of continuity and its identity 2) Value Object - An object that contains attributes but has no conceptual identity. Should be treated as Immutable. 3) Aggregate - A collection of objects that are bound together by a root entity, otherwise known as an aggregate root. 4) Service - implements domain logic when it can’t be done in object. 5) Repository - is an abstraction over persistence store, returning entities or aggregate roots, meeting some criteria 6) Factory - methods for creating domain objects. 7) Domain events !!

Page 11: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

DDD подход

We should always start from questions: !1. Why does it change? 2. When does it change? 3. How often? 4. Who causes it? 5. By which rules? 6. What consequences? !

Page 12: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

DDD: Слои приложения

1. Application Layer 2. Domain Layer 3. Infrastructure Layer

Page 13: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

DDD: область применения

1) сложная предметная область 2) команда разбирается в ООП 3) постоянное общение с доменными экспертами 4) итеративный процесс разработки ПО !

Page 14: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

CQRS

CQRS - Command Query Responsibility Segregation

История появления: !CRUD - манипуляции c данными !!!!TASK UI - выполнение бизнес задач !

Page 15: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

CQRS: commands

Команда – представляет собой отражение бизнес действия, в котором заинтересован пользователь приложения. !Преимущества: 1. Ориентация на бизнес проблемы пользователя. 2. Удобный механизм мониторинга и масштабирования !!

Page 16: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

CQRS: queries

Page 17: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

CQRS: границы применимости

1. Сложная предметная область 2. Domain Driven Design 3. Task UI 4. Нужна масштабируемость

Page 18: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Application Layer

Request form description

Command definition

Page 19: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Application Layer

Page 20: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Domain Layer

1. Account management system 2. Commenting system 3. PM system -> Core app module 4. Entities 5. Notification system 6. Subscription system 7. Security system

Page 21: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Infrastructure layer

1. RDMS: Repositories, Read Model, Seeds etc!2. Mailing System!3. Background commands system!4. Reminders system!5. Websockets system!6. History system!7. Configs!8. File Storage!

Page 22: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Что получили?

1. Развитый домен 2. Низкая связанность модулей 3. Легкость масштабирования 4. Простота тестирования

Page 23: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Технологии

1. Bower package manager 2. Grunt 3. Coffescript 4. AngularJS 1.2.x 5. Тестирование - karma (selenium)

Page 24: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Выбор фреймворка

Плюсы:> 1) мало кода! 2) двухсторонняя связывание данных! 3) директивы (расширение функционала DOM элементов)! 4) встроенный механизм dependency injection! 5) большое community и быстрое развитие!!Минусы:> 1) порог вхождения в разработку с использованием angular высокий! 2) на каждое изменение происходит проверка всех binding текущего scope -> потенциальные проблемы с производительностью! 3) MVW -> W == whatever - самому нужно решить, что это будет -> отсутствие общих практик разработки на angular.js! 4) поверхностная документация

Page 25: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Архитектура

1) Domain driven design -> multilayered architecture (data mappers, repositories, factories etc)!

!2) Отказ от event driven разработки!!3) Директивы!!Дополнительные соглашения: всегда работаем с promise!!!

Page 26: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Примеры директив

Page 27: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Сложности

Существенные проблемы производительности при работе с директивой ng-repeat, вложенной в другую ng-repeat!!Angular не может кешировать DOM для таких ситуаций.!!Решение: разработана альтернатива ng-repeat, которая умеет кешировать DOM -> производительность возрасла в 30-50 раз!

Page 28: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Angular learning curve

Page 29: Гатиятов Руслан, технический директор ООО “Дроид Лабс”: “Система управления проектов Planiro. Архитектура

Ссылки

1. Блог компании - http://droidlabs.pro/blog (видео лекции по DDD и CQRS)

2. Ioc Container - https://github.com/AlbertGazizov/ioc_rb

3. Form Caster - https://github.com/AlbertGazizov/hcast

4. Datamapper Adapter for Sequel - https://github.com/AlbertGazizov/sequel_dm