сделал Владимир Минкин
Введение в Wire
Более 15 лет в производстве IT продуктов
Программист и Технический руководитель
A design is a plan or specification for the construction of an object or system.
Wikipedia
Зачем?
Где?
Кто?
Это про ответы на вопросы
Architecture is not about making decisions earlier, but making decisions late.
Robert C. Martin
другое "общее" определение дизайна это - архитектура
в "идеальной" системе
многие программные системы используют в себе:
И эти две особенности можно описать как набор строк:
ключ - значение
Пусть эти наборы будут храниться в слоях:
Strings это хорошие кандидаты для ключей в слоях
UserVO getUserAccount: {
name : "Vladimir Minkin"
email : "vladimir.minkin@gmail.com"
}
.submitUserAccount({
payload (DTO)
})
(UI) компонент рассматривается с позиции данных
(через вызов функций)
получаем
выводим
Набор
производимых сигналов
(или потребляемых)
каждый "Black Box" может быть описан как два набора строк:
Набор получаемых данных
Методы можно заменять строковыми константами
ACCOUNT: "UserAccount",
POSTS: "UserPosts",
SUBMIT_ACCOUNT: "AccountSubmit", CREATE_POST: "CreatePost", }
Функциональные части системы могут быть объединены:
Некоторые системные "Black Box" слушают и обрабатывают сигналы
"процессоры" принимают решения при получении сигнала с данными.
Независимые компоненты системы
(реализация Component Driven Development)
(или не использовать)
Компоненты получают данные с помощью Data API,
слушают и отправляют "сигналы" с Signals API
Flux is a pattern for managing data flow in application. The most important concept is that data flows in one direction.
Концепция "хода изменения" в FLUX
Что для этого нужно?
компонент уже знает как получить данные
Шаблон Observer в помощь
USER_ACCOUNT: "UserAccount"
value: {
name: ""
email: ""
}
- subscribe (params)
- unsubscribe (params)
- value (set / get )
Observer - позволяет реализовать "обнонаправленное" изменение:
"UserAccount"
subscribe (callback)
Отправляет сигнал(ы)
знает как себя обновить
Обрабатывает сигнал(ы)
Обновляет данные
"блэк бокс"
Data API - Key:
другой "блэк бокс"
В результате:
Изначально написано на Dart.
Два статических слоя
// Signals API
Wire .add(scope, signal, listener)
bool .send(signal, {payload, scope})
bool .remove(signal, {scope, listener})
bool .has({signal, wire})
// Data API
WireData .data(key, [value])
Processors
(or Controllers)
слушают сигланы,
части business logic,
знают про "externals",
обновляют данные,
отправляют сигналы.
В такой системе различают два типа "сущностей":
Consumers
(or View)
потребляют данные,
подписываются на обновления,
обновляют свое состояние (local),
отправляют сигналы с "нагрузкой",
также могут слушать сигналы **.
Classical MVC - Active Models *
At the heart of MVC is what I call Separated Presentation...
- Martin Fowler
В основе идеи о "Раздельное представление":
- разделение между domain objects
- и презентацией объектов GUI
(которые моделируют наше восприятие реального мира)
(которые мы видим на экране).
- Martin Fowler
PureMVC
MVC is simple, there's no reason to keep changing it
- Mr. Cliff Hall автор PureMVC
Model
Спасибо!