Skip to content

Instantly share code, notes, and snippets.

@dmpv
Last active March 19, 2020 01:39
Show Gist options
  • Save dmpv/0b20f7e27b7a8335709982d539b38c72 to your computer and use it in GitHub Desktop.
Save dmpv/0b20f7e27b7a8335709982d539b38c72 to your computer and use it in GitHub Desktop.
SC Chat Structure

Structure

Entities

  • Message<ContentT> (заворачиваем в AnyMessage)
  • ChatNotification
  • ChatAccessory

Models

  • MessageStore — основная модель. Redux Store (cостоит из компонент State, Action и Reducer). Для удобста компоненты разбиты на Local и Feed составляющие. Принцип работы:
    1. Клиент посылает экшн стору: store.dispatch(.someAction(someParam))
    2. Стор обрабатывает экшн с помощью pure-редусера: (Action, State) -> State
    3. Клиент обзервит изменения стейта стора\

У стора нет зависимостей. В нем содержится только логика перехода между стейтами данных

  • MessageStore.Flow — набор из фунций, содержащих бизнес-логику.
    На Store накидываются флоу: пост-обработчики выполненных им экшнов. Они позволяют эмиттить потоки новых экшнов.
    Примеры:
    1. .subscribeOnFeed -> .updateFeed, .updateFeed, .updateFeed, ...
    2. .tryLoadNextPage -> .startLoadNextPage, .finishLoadNextPage\

Флоу накладываются на стор при сборке. Они спрятаны, и для клиента взаимодействие со стором по проежнему остается в рамках store.dispatch(.someAction). У флоу могут быть зависимости и сайд-эффекты. Например, флоу из примера (2) использует messageService для похода за списком сообщений

Верхний уровень

  • ChatUnitCollectionProvider собирает модельную часть UI чата
    In: энтити с MessageStore и ChatNotificationModel
    Out: список из юнитов (ChatUnit)

  • CollectionReloadCoordinator подписывается на изменения [ChatUnit] от провайдера и релоадит коллекцию по диффам

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment