Личный кабинет

Архитектурный вопрос

Good Parts

Pre-written code

Большое количество кода специфичного для проектов 2GIS и наших стандартов разработки browser приложений.

Gulp, библиотеки для работы с картой, общие инструменты для работы с Front End'ом, SVG, Less итд...

Good Parts

AppState

Архитектура для работы с History API, и доставка изменений в систему модулей.

Good Parts

Архитектура из коробки

Сервер, сборка, правила для разработки. Большая экономия времени на стартовом этапе.

Bad Parts

Архитектура данных

Большая часть обработки данных размазана между modules-components-helpers в зависимости от удобств разработчика. 

Все данные silent (молчаливые) и не сообщают о изменениях централизованно. Все обновления данных проходят в ручном режиме.

Bad Parts

Недостаточная докумнетация

Не редко приходится уточнять различные вопросы у разработчиков фреймворка, либо у людей с богатым опытом использования.

Bad Parts

Избыточный ручной контроль

Многие вещи приходится делать руками, создание модулей, прокидывание данных из родительских компонентов дочерним,

вывоз функции slot.rerender(). В некоторых случаях это помогает, а в некоторых это слишком избыточно и можно было бы отдать на отработку фреймворку.

Bad Parts

Проблемы в инструментах

Так как многие инструменты писались исключительно под проект 2GIS.RU, не были учтены некоторые особенности. Яркий пример тому reqwest/request который в версии слота очень плохо работает с post/put/delete запросами. В некоторых случаях придется переписывать для комфортного использования.

 Новая концепция: DDA

Data Driven Application

Data Driven Application

Часть 1: Фундамент

AppState 2.0

Старая схема:

Data Driven Application

Часть 1: Фундамент

Что делать если URL

покрывает только 10%-20%

реальных действий пользователя?

Data Driven Application

Часть 1: Фундамент

Новый подход

Data Driven Application

Часть 1: Фундамент

Новый подход (технически)

AppState это персистентная структура данных Map. Переход между состояниями называется State Patching. Разница между состоянием 1 и 2 это Patch.

Действие направленное на изменение структуры именуется commit'ом. Каждый patch записывается в stateHistory. Источники изменений для AppState называются Providers. Восстановленное состояние называется InitialState. Каждый patch имеет hash представление.

Data Driven Application

Часть 1: Фундамент

Потенциальные сложности

- Очистка состояния от User Action's

- Сложный Patch'инг в некоторых случаях

- Наличие большого количества кода в AppState

Data Driven Application

Часть 1: Фундамент

Концепция AppState 2.0

очень похожа на VCS GIT

Data Driven Application

Часть 1: Фундамент

References

 http://jsonpatch.com/

https://github.com/elierotenberg/remutable

https://github.com/intelie/immutable-js-diff

https://github.com/intelie/immutable-js-patch

Data Driven Application

Часть 2: Стены

Flux Stores

Data Driven Application

Часть 2: Стены

Flux Stores

1 состоянию AppState соответствует 1 состояние данных этого приложения. После изменения состояния, данные должны синхронизоватся.

Все данные приложения можно разделить на 3 уровня: AppState, Model, Specific Model.

Data Driven Application

Часть 2: Стены

Flux Stores

Основным условием для поддерживаемой архитектуры должно служить следующее правило:

Структура данных может подписаться только на структуру которая на 1 приоритет выше чем она.

AppState - 1 // Model - 2 // Specific Model - 3

Data Driven Application

Часть 2: Стены

Тонкие моменты

Внешнее воздействие на структуру данных должно менять appState, но к appStat'у имеет доступ только stateProvider, нужно понять как поступать в таких случаях (например web sockets или polling). 

Нужно внимательно следить за доставкой событий change.

Data Driven Application

Часть 3: Интерьер

Web Components

Web Components

Кандидаты

Data Driven Application

Часть 3: Интерьер

Плюсы

Хорошая документация

Большое коммьюнити

Хорошо ложится на Flux

Есть завязка на state

Минусы

Скудная изоморфность

У команды нет опыта в нем

Быстро не перепишем

Свой шаблонизатор

Непонятно

Быстро ли писать на нем?

На сколько хорош Virtual DOM?

Data Driven Application

Часть 3: Интерьер

Плюсы

Хорошая документация

Быстрая разработка

Хорошо ложится на Flux

Минусы

Нет изоморфности

У команды малый опыт

Очень мало ручного контроля

Непонятно

Сможем ли быстро мигрировать?

Сможем ли быстро развернуть архитектуру под это решение?

Data Driven Application

Часть 3: Интерьер

Плюсы

Хорошая документация

Flux из коробки

Изморфность из коробки

Минусы

Небольшое коммьюнити

В некоторых местах мало ручного контроля

Есть правила о которых нужно помнить

Handlebars из коробки

Есть возможность быстро мигрировать

Data Driven Application

Часть 4: Плюшки

deck

By Kirill Kaysarov