Вступление

Я Идо Гликман, технический руководитель в Datorama. Несколько недель назад я прочитал здесь, в Израиле, лекцию, в которой представил Акиту и рассказал о том, почему мы решили разработать собственного государственного менеджера.

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

Эволюция продукта

Когда мы только начинали разработку клиентской части, мы писали ее на ванильном Javascript, без использования компонентов или диспетчера состояний. Мы быстро поняли, что нам нужно обновить систему и начать использовать более продвинутые концепции и методы.

Мы решили использовать Angular в сочетании с ngrx, что было наиболее рекомендуемым решением в то время и, вероятно, единственным.
Мы начали наше путешествие с ngrx и очень быстро обнаружили, что нас ждет приключение.

Что мы испытали в ngrx

Крутая кривая обучения

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

Boilerplate

Я думаю, что каждый, кто работает или работал с ngrx, испытывает каждый день. Чтобы создать даже самую маленькую функцию, вам нужно создать так много вещей, как редукторы, эффекты, действия, создатели действий и т. Д.

Мышление функционального программирования

ngrx, как и redux, имеет тенденцию использовать функциональное программирование, что, как я чувствовал, мешало программистам из других миров, таких как Java, участвовать в разработке и «чувствовать себя как дома».

И вот как мы чувствовали себя в тот период.

Все вышесказанное привело нас к выводу, что нам необходимо разработать государственного менеджера, который будет исчерпывающим ответом на все наши потребности с учетом будущих потребностей сообщества. Так родилась Акита.

Акита в Датораме

Начнем с того, что за Акитой стоит компания - Datorama. Datorama инвестирует и платит нам, разработчикам, чтобы улучшить Akita и сделать ее лучше для нас, а также для сообщества, и это способ для нас вернуть сообществу все, что он нам дает.

Другое дело, что до того, как мы представили его сообществу, Akita использовалась здесь для внутреннего пользования более шести месяцев, что означает, что она прошла все процессы тестирования, ошибок, запросов функций и т. Д.

И последнее: наш продукт - это продукт с большими данными. У нас есть огромное количество данных в клиенте, и Akita прекрасно с ними справляется.

Что такое акита

Акита - это шаблон управления состоянием, построенный на основе RxJS. Акита поощряет простоту. Он избавляет вас от необходимости создавать шаблонный код и предлагает мощные инструменты с умеренной кривой обучения, подходящие как для опытных, так и для неопытных разработчиков.

Akita основана на принципах объектно-ориентированного проектирования, а не на функциональном программировании, поэтому разработчики с опытом ООП должны чувствовать себя как дома. Его упрямая структура предоставляет вашей команде фиксированный шаблон, от которого нельзя отклоняться.

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

Два основных компонента Akita - это магазин и запрос. Вы можете думать о хранилище как о таблице, содержащей данные в базе данных, и вы можете выполнять с ней различные действия, такие как вставка, обновление и т. Д.

В дополнение к Store есть Query, который является нашим способом запрашивать данные из магазина. Запросы могут взаимодействовать с другими запросами, выполнять «соединение» между ними для создания более сложного запроса и т. Д.

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

Так мы получаем односторонний поток данных с точной архитектурой, от которой нельзя отклоняться.

Магазин"

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

Хранилища сущностей Akita предоставляют вам все инструменты, необходимые для легкого управления хранилищем, например, для вставки, обновления и удаления сущностей.

Итак, как нам создать магазин? Очень просто - по наследству. Расширьте супер и получите все, что вам нужно. Например, грубые операции, управление активными объектами, управление ошибками, отображение «загрузки» во время загрузки данных и многое другое.

Запрос

Запрос - моя любимая часть Akita, и это наш способ получать данные из магазина. Как и магазин, он имеет два типа: запрос для базовых магазинов и запрос для хранилищ сущностей.

Вы можете разделить методы запроса на два типа. Метод, который начинается с select, для которого вы получите наблюдаемый объект для запрошенных данных, и методы, которые начинаются с get, с помощью которого вы получите запрошенные данные одноразовым прямым способом.

Важно подчеркнуть, что подписка не будет активирована, если запрошенное вами значение не будет изменено по ссылке.

Итак, как нам создать запрос? Любите магазин, наследуйте супер и получайте все, что вам нужно.

Дополнительная функциональность

Экосистема плагинов

Redux dev-инструменты

Akita обеспечивает интеграцию с dev-tools redux.

Угловые схемы

Если вы хотите добавить Akita в свое приложение или уже используете его, вы можете использовать schematics, чтобы упростить создание функций Akita.

Магазинные усилители

  • Диспетчер моментальных снимков - сохраните все состояние приложения как JSON
  • Сохранение состояния - автоматическая синхронизация хранилищ с локальным хранилищем

Акита в будущем

  • Мы продолжим добавлять функции и разрабатывать плагины.
  • Важно сказать; ваша ошибка - наша ошибка. Акита работает с нами, и для нас очень важно как можно скорее решить любую обнаруженную вами ошибку.
  • Сейчас Akita ориентирована на Angular, но важно подчеркнуть, что нет никакой связи между Angular и Akita, и мы постараемся увидеть, как она может интегрироваться вместе с другими фреймворками, такими как React или Vue.
  • Уже есть значительное количество статей, посвященных Аките, конечно, мы продолжим инвестировать в эту тему и создавать больше подобных.

Вот отличный контент, который погружается в код: