Картина маслом:

• Общий стейт для модуля

• Фасады для каждого компонента

Компоненты инжектят свои Фасады

• Фасад выполняет "грязную" работу компонента

• Через фасад компонент получает данные, изменяет стейт, исполняет АПИ запросы

ИСХОДНЫЕ ДАННЫЕ:

• Страница PANEL с данными юзера и компонент PAYMENT для работы с payment-card:

• резолвер данных по роутингу

• главный компонент

• компонент по роутингу

PanelState для модуля (планируется до 5 компонентов)

• BehaviorSubject'ы для списков, объектов, др. переменных

• Содержит get / set для всех BehaviorSubject'ов

1. Забираю начальные данные

2. Сохраняю в PANELSTATE

3. Все равно возвращаю резолв в роут

Через PanelFacade

• вытаскиваем данные явно (если надо) 

• checkCardError();

PaymentFacade (part 1)

В DI фасада находятся:

• Общий стейт

• Апи сервис

• Другие фасады...

 

PaymentFacade (part 2)

...В фасаде находятся:

I. Селекторы объектов 

II. Другие фасады

III. Изменение PanelState

IV. Бизнес логика 

 

В компоненте находятся:

I. DI PaymentFacade - фасад этого компонента

II. Селектим все данные

III. Вся бизнес логика передается в фасад

 

 

PaymentComponent

PaymentComponent

• Через async pipe берем user

• Выполняем методы

Итого:

• Существует общий стейт для все переменных$

• Фасады для каждого компонента

• Фасад инжектит только API и STATE сервисы

• Компоненты инжектят свои Фасады

• Компоненты НЕ инжектят API или STATE сервисы

Мои предположения:

• Стоит придерживаться фасадов, т.к. компонент в таком случае - чистый presentation layer

• Стоит разделять сервисы на API, STATE, FACADE сервисы, для понимания функций каждого

 

Плюсы такого подхода:

• Все изменения происходят в Фасаде (easy to debug)

• Разделение логики по сервисам

• Проще маинтейнить

• Появляется возможность держаться RXJS подхода

• Легко начать использовать

дает возможность перейти на any reactive state manager framework ngrx / ngxs / akita etc.

Reactive architecture (raw, non-ngrx)

By Konstantin Malikov

Reactive architecture (raw, non-ngrx)

Simple and raw example of possible architecture using Facades and States in any angular app. Please criticize & leave comments! https://github.com/malikov917/facade-structure-sample

  • 303