- 1. Введение
- 2. Что такое EventBus
- 3. Сравнение похожих товаров.
- Используйте трилогию EventBus3.0
- 1. Определите событие
- 2. Подготовьте подписчиков
- 3. Отправить мероприятие
- понять глубже
- 1. ThreadMode связь потоков
- 2. Настройте EventBusBuilder.
- 3.StickyEvent
- 4. приоритет приоритетного события
- 5. Прервать доставку события.
- 6. ускорение индекса индекса
- 7.NoSubscriberEvent
- 8. Замешательство
- 9. Плюсы и минусы
- Рекомендации
- 1. Управление EventBus
- 2. Целевые события
- Русские Блоги
- Шина событий (сообщений) Flutter EventBus
- Интеллектуальная рекомендация
- PAT Class B 1090 Упаковка для опасных грузов
- Клавиша ярлыка терминатора Ubuntu1804
- Конфигурация резервного копирования библиотеки Postgresl под WIN окружающей среды
- Каркас TensorFlow для машинного обучения
- Компьютерная графика (семь) Кривая Безье (Bessel) и исходный код
- 5 приемов в помощь разработке на vue.js + vuex
- 1. Централизованная шина событий (Event Bus)
- 2. Централизованная шина промисов (Promises Bus)
- 3. Плоские структуры (flatten store)
- 4. Мутации не нужны
- 5. Ограничение реактивности
- Вопросы
- 🌟 Видео
1. Введение
Однажды слой за слоем бизнес-логики приводил меня в недоумение, один обратный вызов за другим вызывали у вас головокружение, а один параметр за другим сбивали вас с толку. EventBus, фреймворк с низкой степенью связи, который пугает.
2. Что такое EventBus
EventBus — это шина сообщений, реализованная в режиме наблюдателя, используемая для упрощения программных компонентов и взаимодействия потоков, и может легко переключать потоки и открывать потоки. Отличие EventBus3.0 от предыдущей версии заключается в добавлении аннотации @Subscribe, которая заменяет предыдущее соглашение об именах.
3. Сравнение похожих товаров.
наименование товара | Разработчик | Замечания |
---|---|---|
EventBus | greenrobot | Максимум пользователей, краткий, удобный, небольшой, краткий и понятный документ |
Guava | Огромная библиотека инструментов, EventBus — это всего лишь небольшая функция | |
otto | square | Вилка гуавы, многие ее используют |
AndroidEventBus | Хэ Хунхуэй | Имитация разработки EventBus |
Видео:Vue JS #24 Глобальная шина событий (The Event Bus)Скачать
Используйте трилогию EventBus3.0
1. Определите событие
2. Подготовьте подписчиков
3. Отправить мероприятие
Видео:Шина событий (Event Bus). UnityСкачать
понять глубже
1. ThreadMode связь потоков
EventBus может легко переключаться между потоками, включая фоновые потоки, потоки пользовательского интерфейса и асинхронные потоки.
2. Настройте EventBusBuilder.
EventBus предоставляет множество настроек. В обычных условиях настраивать его не нужно. Однако, если у вас есть другие требования, такие как управление выводом журнала во время разработки, а не выводом во время выпуска, сбой из-за ошибки во время разработки и выпуск во время выпуска Никакого сбоя . и т. Д.
EventBus предоставляет реализацию по умолчанию, но не синглтон.
3.StickyEvent
StickyEvent сохраняет последнее сообщение в памяти, отменяет исходное сообщение и выполняет последнее сообщение. Оно будет выполнено только после регистрации. Если регистрации нет, сообщение всегда будет храниться в памяти.
Вы также можете управлять StickyEvent вручную
Здесь у вас может возникнуть вопрос,
Могут ли подписчики с StickyEvent = true получать события публикации?
Могут ли подписчики StickyEvent = false получать события postSticky?
Просмотр обнаружения исходного кода
Обнаружено, что метод post не фильтрует StickyEvent, а postSticky вызывает метод post, поэтому независимо от того, является ли post или postSticky StickyEvent истинным или ложным, он будет выполнен
4. приоритет приоритетного события
5. Прервать доставку события.
6. ускорение индекса индекса
EventBus использует аннотацию, которая по умолчанию генерирует код и индексы во время компиляции.
После добавления индекса он будет запущен во время компиляции, и соответствующий код будет автоматически сгенерирован.
ps: из-за ограничений apt аннотации в анонимном внутреннем классе не будут распознаваться и будут автоматически ухудшены, чтобы отражать их во время выполнения. В это время эффективность будет снижена
Адрес официального сайта EventBus
Поскольку kotlin использует аннотации по-разному, вам нужно использовать kapt
ps: если необходимо проиндексировать несколько модулей, указанные выше три apts должны быть добавлены к каждому модулю, и импорт пакета не нужно повторять
Таким образом, код будет автоматически сгенерирован после компиляции.
Метод события создается путем отражения во время компиляции и сохраняется на карте. Когда событие отправляется, вызывается getSubscriberInfo для получения карты.
7.NoSubscriberEvent
Если событие подписчика не найдено, вы можете указать, следует ли отправлять NoSubscriberEvent по умолчанию через EventBusBuilder, который по умолчанию включен.
8. Замешательство
9. Плюсы и минусы
Простая, удобная, компактная, понятная документация, низкое энергопотребление, настраиваемая прочность линии, низкое сцепление
Это определенно не шутка. Связь EventBus слишком мала. Если она не контролируется и не управляется, вы не будете знать, куда идет отправленное вами сообщение. Я не знаю, куда будет отправлено ваше сообщение. Если у вас нет хорошего способа решить эту проблему, рекомендуется не использовать слишком много.
Видео:Почему я использую паттерн "Шина событий" в продеСкачать
Рекомендации
1. Управление EventBus
EventBus запускается для создания нескольких, затем, чтобы уточнить жизненный цикл события, использовать разные EventBus в соответствии с разными жизненными циклами?
2. Целевые события
Инкапсулируйте данные в класс событий. Все события помещены в один пакет. Если событий слишком много, события одного модуля можно рассматривать с помощью статических внутренних классов или субподряда.
Обратите внимание, что если они не одного типа, они должны быть упакованы как событие. Необходимо учитывать определенные бизнес-сценарии и условия кода. Например, поведение событий и жизненные циклы событий различаются. При необходимости лучше записать пакеты в два события.
Видео:Как организовать сигналы в Godot / Паттерн проектирования Шина Событий (Event Bus)Скачать
Русские Блоги
Видео:Что такое шина событий | Микросервисы | Монорепозиторий | GSpotСкачать
Шина событий (сообщений) Flutter EventBus
Flutter был создан Google (ведущей в мире компанией, занимающейся интернет-технологиями), и у него достаточно сложный опыт. Нет никаких сомнений в том, что Flutter скоро или станет основным направлением кроссплатформенной разработки. Flutter очень амбициозен, не только влияет на нативную разработку, но и может сгореть Веб-интерфейс. Если вы как разработчик мобильных устройств не обращаете внимания на Flutter, вы не можете этого оправдать!
В приложении APP нам часто требуется механизм широковещательной рассылки для межстраничных уведомлений о событиях. Например, при переходе с первой страницы на вторую страницу действия пользователя, работающего на второй странице, должны вовремя возвращаться на первую страницу (например, обновление данных на странице). В этом сценарии очень полезна шина событий. Шина событий обычно реализует модель подписчика. Модель подписчика включает две роли: издатель и подписчик. События могут запускаться и контролироваться через шину событий. В этой статье описывается, как использовать Flutter Используйте EventBus для реализации сценариев, подобных описанным выше.
Один, визуализации
Начальное состояние первого интерфейса
Второй интерфейс использует нажатие кнопки для запуска события EventBus.
Первый интерфейс показывает данные, отправленные вторым интерфейсом (т. е. пользовательский интерфейс обновляется)
2. Интегрируйте EventBus во Flutter
Добавьте event_bus в файл pubspec.yaml, текущая версия — 1.1.0:
2. Представьте EventBus
3. Создайте экземпляр EventBus.
YDCEventBusManage.dart полный код
4. Определите событие, любой класс Dart можно использовать как событие.
4. Зарегистрируйтесь, чтобы слушать на первой странице.
EventBus реализуется через Dart Streams, поэтому мы можем управлять EventBus, управляя Dart Stream.
Слушайте все события в eventBus.
Слушайте только EventParam.
Весь исходный код первой страницы
5. Страница отправляет событие EventParam во втором событии триггерной кнопки. В это время будет немедленно обновлен первый интерфейс.
6. EventBus также можно использовать в следующих сценариях:
1. Связь между родительскими и дочерними компонентами на одной странице
2. Его можно использовать как глобальное событие для всего приложения, например HTTP-запрос, обновляющий один или несколько интерфейсов под определенным значением кода.
Если это вам поможет, не стесняйтесь вознаграждать меня деньгами на сухое молоко, спасибо!
WeChat:
Alipay:
Интеллектуальная рекомендация
PAT Class B 1090 Упаковка для опасных грузов
При транспортировке товаров в контейнерах нужно быть очень осторожным, чтобы не упаковать несовместимые товары в ящик. Например, окислитель не должен находиться в одной емкости с легковоспламеняющейся.
Клавиша ярлыка терминатора Ubuntu1804
Установить Рендеринг горячая клавиша Ctrl + Shift + E Вертикальное сегментационное окно Ctrl + Shift + O Горизонтальное сегментационное окно Ctrl + Shift + N Свободно переключите каждое окно сегментац.
Конфигурация резервного копирования библиотеки Postgresl под WIN окружающей среды
1. Изменение основного сервера и в режиме ожиданияИзмените разрешение подключения файла pg_hba.conf базы данных: изменился на: В это время, вы должны убедиться, что вы можете подк.
Каркас TensorFlow для машинного обучения
TensorFlow рамки 1. Введение TensorFlow — это система обучения искусственному интеллекту второго поколения, разработанная Google на основе DistBelief, и ее название происходит от ее собственного принц.
Компьютерная графика (семь) Кривая Безье (Bessel) и исходный код
Загрузка исходного кода:Нажмите меня, чтобы скачать «Кривая Безье» была изобретена французским математиком Пьером Безье, который заложил основы компьютерной векторной графики. Его основное.
Видео:Как создать свою шину событий и понять зачем она нужна. Event Bus JavaScriptСкачать
5 приемов в помощь разработке на vue.js + vuex
Недавно решил разобраться с vue.js. Лучший способ изучить технологию — что-нибудь на ней написать. С этой целью был переписан мой старый планировщик маршрутов, и получился вот такой проект. Код получился достаточно большим для того, чтобы столкнуться с задачей масштабирования.
В этой статье приведу ряд приемов, которые, на мой взгляд, помогут в разработке любого крупного проекта. Этот материал для вас, если вы уже написали свой todo лист на vue.js+vuex, но еще не зарылись в крупное велосипедостроение.
1. Централизованная шина событий (Event Bus)
Любой проект на vue.js состоит из вложенных компонентов. Основной принцип — props down, events up. Подкомпонент получает от родителя данные, которые он не может менять, и список событий родителя, которые он может запустить.
Принцип годный, но создает сильную связность. Если целевой компонент глубоко вложен, приходится протаскивать данные и события через все обертки.
Разберемся с событиями. Зачастую полезно иметь глобальный event emitter, с которым может общаться любой компонент независимо от иерархии. Его очень легко сделать, дополнительные библиотеки не нужны:
После этого в любом компоненте появляется доступ к this.$bus, можно подписываться на события через this.$bus.$on() и вызывать их через this.$bus.$emit(). Вот пример.
Очень важно понимать, что this.$bus — глобальный объект на все приложение. Если забывать отписываться, компоненты остаются в памяти этого объекта. Поэтому на каждый this.$bus.$on в mounted должен быть соответствующий this.$bus.$off в beforeDestroy. Например, так:
2. Централизованная шина промисов (Promises Bus)
Иногда в компоненте нужно инициализировать некую асинхронную штуку (например, инстанц google maps), к которой хочется обращаться из других компонентов. Для этого можно организовать объект, который будет хранить промисы. Например, такой. Как и в случае в event bus, не забываем удаляться при деинициализации компонента. И вообще, указанным выше способом к vue можно прицепить любой внешний объект с любой логикой.
3. Плоские структуры (flatten store)
В сложном проекте данные зачастую сильно вложены. Работать с такими данными неудобно как в vuex, так и в redux. Рекомендуется уменьшать вложенность, например, воспользовавшись утилитой normalizr. Утилита — это хорошо, но еще лучше понимать, что она делает. Я не сразу пришел к пониманию плоской структуры, для таких же типа себя рассмотрю подробный пример.
Имеем проекты, в каждом — массив слоев, в каждом слое — массив страниц: projects > layers > pages. Как организовать хранилище?
Первое, что приходит в голову — обычная вложенная структура:
Такую структуру легко читать, легко бегать циклом foreach по проектам, рендерить подкомпоненты со списками слоев и так далее. Но предположим, что нужно поменять название страницы с id:1. Внутри некоторого маленького компонента, который отрисовывает страницу, вызывается $store.dispatch(«changePageName», ). Как найти место, где в этой глубоко вложенной структуре лежит нужный page с id:1? Пробегать по всему хранилищу? Не лучшее решение.
Можно указывать полный путь, типа
Но это значит, что в каждый маленький компонент рендеринга страницы нужно протаскивать всю иерархию, и projectId, и layerId. Неудобно.
Теперь данные легко менять. Но тяжело бегать. Чтобы вывести все страницы в одном слое, нужно пробежать по вообще всем страницам. Это может быть спрятано в getter-е, или в рендеринге шаблона, но пробежка все равно будет.
Третья попытка, подход normalizr:
Теперь все страницы слоя могут быть получены через тривиальный геттер
Заметим, что геттер не бегает по списку всех страниц. Данные легко менять. Порядок страниц в слое задан в объекте layer, и это тоже правильно, поскольку процедура пересортировки как правило находится в компоненте, который выводит список объектов, в нашем случае это компонент, который рендерит layer.
4. Мутации не нужны
Согласно правилам vuex, изменения данных хранилища должны происходить только в функциях-мутациях, мутации должны быть синхронными. В vuex находится основная логика приложения. Поэтому блок валидации данных тоже будет логичным включить в хранилище.
Но валидация далеко не всегда синхронна. Следовательно, по крайней мере часть валидационной логики будет находится не в мутациях, а в действиях (actions).
Предлагаю не разбивать логику, и хранить в actions вообще всю валидацию. Мутации становятся примитивными, состоят из элементарных присваиваний. Но тогда к ним нельзя обращаться напрямую из приложения. Т.е. мутации — некая утилитарная штука внутри хранилища, которая полезна разве что для vuex-дебаггера. Общение приложения с хранилищем происходит через исключительно действия. В моем приложении любое действие, даже синхронное, всегда возвращает промис. Мне кажется, что заведомо считать все действия асинхронными (и работать с ними как с промисами) проще, чем помнить что есть что.
5. Ограничение реактивности
Иногда бывает, что данные в хранилище не меняются. Например, это могут быть результаты поиска объектов на карте, запрошенные из внешнего api. Каждый результат — это сложный объект с множеством полей и методов. Нужно выводить список результатов. Нужна реактивность списка. Но данные внутри самих объектов постоянны, и незачем отслеживать изменение каждого свойства. Чтобы ограничить реактивность, можно использовать Object.freeze.
Но я предпочитаю более тупой метод: пусть state хранит только список id-шников, а сами результаты лежат рядом в массиве. Типа:
Вопросы
Кое-что у меня получилось не настолько красиво, как хотелось. Вот мои вопросы к сообществу:
— Как победить css анимации сложнее изменения opacity? Часто хочется анимировать появление какого-то блока неизвестных размеров, т.е. изменить его высоту с height: 0 до height: auto.
Это легко решается с javascript — просто оборачиваем в контейнер с overflow: hidden, смотрим высоту обернутого элемента и анимируем высоту контейнера. Это можно решить через css?
— Ищу нормальный способ работы с иконками в webpack, пока безуспешно (поэтому продолжаю пользоваться fontello). Нравятся иконки whhg. Вытащил svg, разбил на файлы. Хочу выбрать несколько файлов и автоматически собирать в inline шрифт + классы на основе названий файлов. Чем это можно делать?
🌟 Видео
Паттерн EventBus или Шина Событий в UnityСкачать
Шины VS брокеры сообщений | KT.Team | Андрей ПутинСкачать
Валентин Гогичашвили — События, шины и интеграция данных в непростом мире микросервисовСкачать
Уроки Javascript #2. Объект Event (Событие), Всплытие и Погружение (Фазы Жизненного Цикла События).Скачать
Делегаты и события на практикеСкачать
Почему нас топит и жарит, но это хорошо: как Россия выиграет от изменения климата (ну или проиграет)Скачать
Интеграционные шиныСкачать
ПОКА ТАКИЕ АВТО В НАЛИЧИЕ, НАДО БРАТЬ! Взял на 100к дешевле 2023 года новый CHERY ARRIZO 8 ULTIMATEСкачать
Как шины Alliance могут сэкономить топливо? Компания «АгроПромШина». Дмитрий СысолетинСкачать
Автомобильные Шины - Как Это Сделано?Скачать
#26 Всплытие событий - Vue.js: нюансыСкачать
🔥Андреев раскрыл очередную мутную схему ! ДПС МВД Администрация СтаромышастовскаяСкачать
Node.js #5 Модуль событий (Event Module)Скачать
Федеральный судья: Родственное делоСкачать