Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пятничные нотификации / 25 сообщений из 39, страница 1 из 2
21.11.2020, 11:47
    #40020973
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
Архитектурный вопрос.

Есть у вас проект.
Есть у вас слой приложения.
Есть у вас слой UI.
Есть у вас слой логики/транспорта/чего-то ещё.

И вот где-то в недрах у вас происходит нечто, что надо отобразить в UI.

Вот прям сейчас в проекте я делал так: приложение управляет объектами, тут же проверяет какие-то их параметры, и если что, то делает отметки в UI.
А потот я решил сделать "правильно" и выкинуть весь этот код из слоя приложения. Потому что уж много там делализаций получается.

То есть было, грубо если, так:
Приложение управляет объектами 1-го уровня, получает от них объекты 2-го уровня, от них 3-го уровня и делает выводы.

Стало:
Приложение работает с объектами 1-го уровня. Объекты любых уровней, если что случилось, собирают нотификацию, отправляют её родителю, он лепит свой id в хвост и отправляет выше, и так далее. Отправка - просто вызов функции с vector<string> ref. На верхнем уровне приложение парсит вектор и делает действия.

Какие есть варианты для такой архитектуры? Этот тоже норм?
...
Рейтинг: 0 / 0
21.11.2020, 11:54
    #40020975
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
В UI строительстве раньше использовался шаблон Document-View.

Сейчас его заменяют на MVC (Model-View-Controller), MVP (Model-View-Presenter),
и MVVM (Не помню расшифровку).

Посмотри какой из них ближе к тебе.
...
Рейтинг: 0 / 0
21.11.2020, 13:34
    #40020991
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
CEMbКакие есть варианты для такой архитектуры?

"50 оттенков серого."

Назачем городить такую слоёнку? Каждая подсистема имеет свой интерфейс. Остальные системы
просто используют эти интерфейсы по необходимости. Произошло что-то, требующее "отметки в
UI"? Просто вызови соответствующую функцию UI-шного интерфейса. Что и как она будет делать
внутри - не твоё дело.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.11.2020, 14:06
    #40020993
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
CEMb
То есть было, грубо если, так:
Приложение управляет объектами 1-го уровня, получает от них объекты 2-го уровня, от них 3-го уровня и делает выводы.

Не по ООП.
Надо делить не по уровням а по функционалу.
Умный объект - Карта. Она сама показывает изменения, сама сохраняет настройки в файл если ей дали имя-путь и сама рисует на HDC переданный в параметре.
Тогда приложение управляет умными объектами.
А нотификация или сообщения сами всплывают вверх в каждом объекте таким как карты, список выпадающий, светофор, будильник.
JSОсновной принцип всплытия:

При наступлении события обработчики сначала срабатывают на самом вложенном элементе, затем на его родителе, затем выше и так далее, вверх по цепочке вложенности.
https://learn.javascript.ru/event-bubbling
...
Рейтинг: 0 / 0
21.11.2020, 17:28
    #40021015
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
CEMb

Приложение работает с объектами 1-го уровня. Объекты любых уровней, если что случилось, собирают нотификацию, отправляют её родителю, он лепит свой id в хвост и отправляет выше, и так далее.
Отправка - просто вызов функции с vector<string> ref.

Немного не согласен с терминологией.

Нотификация - предполагает месседжинг. Тоесть существование среды где месседж путешествует отдельно от вызвавшего
его процесса или потока.
...
Рейтинг: 0 / 0
21.11.2020, 18:08
    #40021018
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
CEMb,


Я в нескольких не-ОО проектах так сделал обработку ошибок.
Событие (ошибка) возвращалась в предыдущий уровень, обобщалась (если код был слишком специализированный), обрастала именами слоев и наверху была похожа на стэк трейс.

Но это синхронный вызов, от первого уровня.
У вас в дизайне есть негласное утверждение что UI наверху, и всем управляет. Синхронно вызывает методы, парсит векторы сообщений и решает что делать дальше.

А если одному объекту, не UI, захотелось получить определенные оповещения?
A если произошло асинхронное событие в недрах?
А если многопоточность? В каком потоке приходят сообщения?
...
Рейтинг: 0 / 0
21.11.2020, 18:19
    #40021019
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
НеофитSQL
UI наверху, и всем управляет

Если такая модель типа клиент-сервер, то сервер не может вызывать и оповещать клиентов.
Только клиенты могут опрашивать сервер - "нет ли что для меня?".
...
Рейтинг: 0 / 0
21.11.2020, 18:38
    #40021020
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
PetroNotC Sharp
НеофитSQL
UI наверху, и всем управляет

Если такая модель типа клиент-сервер, то сервер не может вызывать и оповещать клиентов.
Только клиенты могут опрашивать сервер - "нет ли что для меня?".


У клиент-сервера жизненный цикл клиента не совпадает с сервером, там ещё нужен "я новый клиент, дай начальное состояние".

Для программистов винды довольно типично забыть про headless и командную строку, и поставить UI во главе всего взаимодействия компонент.
Это один из подходов, и он может работать.
...
Рейтинг: 0 / 0
21.11.2020, 18:42
    #40021021
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
НеофитSQLДля программистов винды довольно типично забыть про headless и командную строку, и
поставить UI во главе всего взаимодействия компонент.

Особенно для программистов Дельфи, которые программируют в основном мышкой. UI модуль,
крутящийся в своём потоке, ничем не хуже и не лучше любого другого модуля, занимающего
свой собственный поток.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.11.2020, 19:36
    #40021027
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
Я так понимаю что бесполезно обсуждать нотификации UI без понимания устойчивых практик
целевого языка или runtime. Тоесть наличие у нас во главе тех-задания
Delphi. Java/FX/Swing, Windows/MFC/WPF/Qt, Linux/Gnome, Linux/KDE, Generic/Qt
будет оказывать сильное воздействие на реализацию. Даже более
сильное чем нам хотелось-бы.

Как-то так.
...
Рейтинг: 0 / 0
21.11.2020, 20:06
    #40021029
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
mayton,

Обсуждать можно, советовать вряд ли. Слишком мало известно о проекте. Судя по форуму, проект в с++. Судя по стилю программирования, наверное винда.

Если у ТС вопрос бывает ли так - бывает.

У UI-centric апликух богатая история, они пока никуда не исчезают. У этой архитектуры есть несколько недостатков, некоторые из которых я упомянул в своем первом ответе. Эти недостатки могут быть совершенно несущественными для ТС, если программа остаётся монолитно-однопоточной без внешних функций управления.

Я даже скажу, это правильное решение по умолчанию для большинства приложений с UI.
...
Рейтинг: 0 / 0
21.11.2020, 20:26
    #40021030
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
Dimitry Sibiryakov
Особенно для программистов Дельфи, которые программируют в основном мышкой.
далось тебе это дельфи. Там не особо сильно отличается от программирования на Си.

Dimitry Sibiryakov
UI модуль,
крутящийся в своём потоке, ничем не хуже и не лучше любого другого модуля, занимающего
свой собственный поток.

ну да, все мы состоим из атомомов и единиц и нулей.
И сам по себе атом золота ничем не хуже атома Г...
Только это все не относится к теме.
...
Рейтинг: 0 / 0
21.11.2020, 20:31
    #40021031
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
mayton,
да. Я тоже считаю, что архитектуру определяет платформа на которой пишем.
Но ТС обычно всё всё пишет с нуля. Так труднее.
...
Рейтинг: 0 / 0
22.11.2020, 11:21
    #40021062
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
mayton
В UI строительстве раньше использовался шаблон Document-View.
Он есть, тут вопрос был про сам Document и нотификации внутри него.
Dimitry Sibiryakov
Назачем городить такую слоёнку? Каждая подсистема имеет свой интерфейс. Остальные системы
просто используют эти интерфейсы по необходимости. Произошло что-то, требующее "отметки в
UI"? Просто вызови соответствующую функцию UI-шного интерфейса. Что и как она будет делать
внутри - не твоё дело.
Я неудачно использовал понятие "слой". Давайте я на примере покажу.
У меня есть танк. Есть игра(приложение), которая рулит UI. У танка есть внутренние объекты, типа "оружие", одно из них пушка. Танк едет по полю и собирает ящик с особыми припасами, 20 штук.
Тут надо на UI это отобразить, нарисовать значок и 20. А по мере стрельбы, цифру уменьшать, когда будет ровна нулю, значок убрать.
Как было: игра на каждом шагу лезет в танк, находит у него пушку и в пушен проверяет количество особых припасов - изменяет UI.
Как стало: пушка, когда получает/теряет припасы, собирает нотификацию для танка, танк передаёт её в игру, игра делает отметки в UI.
Т.е. есть иерархия классов, и где-то на нижних уровнях объекты хотят оповестить приложение на самом верху.
PetroNotC Sharp
Надо делить не по уровням а по функционалу.
Умный объект - Карта. Она сама показывает изменения, сама сохраняет настройки в файл если ей дали имя-путь и сама рисует на HDC переданный в параметре.
Тогда приложение управляет умными объектами.
А можно как-то на примере показать? я не совсем понял.
mayton
Нотификация - предполагает месседжинг.
Ну, как бы, да, в общем случае, но тут просто нет очереди, а нотификация сразу приходит в приложение. Я сначала подумал про очередь, а потом подумал - а зачем? Только лишние сложности, функционал, который мне не требуется, а только может всё усложнить. Мне надо только универсальным образом оповестить приложение.
НеофитSQL
А если одному объекту, не UI, захотелось получить определенные оповещения?
A если произошло асинхронное событие в недрах?
А если многопоточность? В каком потоке приходят сообщения?
Нет, у меня всего этого нету. Но первый пункт теоретически возможен, надо будет про это подумать, спасибо.
НеофитSQL
Обсуждать можно, советовать вряд ли.
Ну, кстати, я тему завёл частично для всем поделиться полезными практиками, опытом.
PetroNotC Sharp
Но ТС обычно всё всё пишет с нуля. Так труднее.
Да ну не всегда :) Я стараюсь один раз писать с нуля, потом этот код использовать
А вообще, я вот смотрю на плюсы и на яву, для меня вот загадка, как в яве так получается, что все про все библиотеки знают? А с плюсами не так, я читаю телеграмчик, и там постоянно дают ссылки на какие-то полезные вещи, про которые я вообще не знал.
...
Рейтинг: 0 / 0
22.11.2020, 11:49
    #40021067
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
Каждый кодер должен хоть раз в жизни написать свои "танчики".
...
Рейтинг: 0 / 0
22.11.2020, 13:28
    #40021076
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
CEMbКак было:
Как стало:
Не вижу разницы. В обоих случаях объекты занимаются тем, что не входит в их круг
обязанностей и лезут туда, куда им не надо.

Но раз ты доволен - всё хорошо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.11.2020, 17:28
    #40021112
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
Разработчики game-dev не очень соблюдают философии SOLID.

Для них - задача-прим - гарантировать отсутсвие лагов и чтоб
кеши L1/L2 были прогреты нужными данными.

По сути они - уродуют и калечат красивый код в угоду требованиям капризных
пользователей.

Тоесть на "Кривой Шипилёва" они стоят в зоне разворота когда качество кода
ухудшается в 2 раза ради 5% ускорения алгоритма. И дальше можно
ускорить на 10% ухудшив код в 2000 раз. И так далее. Пока не будет простыня
из ассемблера где нет ни объектов ни RTTI, только чистый конечный автомат.
...
Рейтинг: 0 / 0
22.11.2020, 18:16
    #40021119
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
maytonДля них - задача-прим - гарантировать отсутсвие лагов

Насколько я могу судить по современным играм, их задача - выпустить игру хоть как-то. Лаги
и глюки отлавливаются потом да и то если время от подготовки следующего аддона останется.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.11.2020, 19:02
    #40021126
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
CEMb,

авторКак стало: пушка, когда получает/теряет припасы, собирает нотификацию для танка, танк передаёт её в игру, игра делает отметки в UI.

Если раньше был опрос пушки-объекта, а теперь уведомление от танка-объекта, то особой разницы по-моему нет.

Игра интенсивно экран перерисовывает 30-100фпс, пушка является неотъемлемой частью игры, прятать ее за объектом танка вряд ли полезно.
Синхронные уведомления мало отличаются от опроса, когда выстрел инициируется из UI. В случае с подбираем снарядов (внешнее событие), уведомление выигрывает.

Мое личное мнение что архитектура в смысле ОО улучшилась, эффект на скорость вряд ли заметный.
...
Рейтинг: 0 / 0
22.11.2020, 19:13
    #40021129
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
НеофитSQLИгра интенсивно экран перерисовывает 30-100фпс, пушка является неотъемлемой частью игры,
прятать ее за объектом танка вряд ли полезно.

Пушка-объект интерфейса и пушка-элемент игрового мира это два разных объекта,
просчитываемые и обрабатываемые двумя разными модулями независимо. Лично мне так кажется.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.11.2020, 19:45
    #40021135
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
Dimitry Sibiryakov

maytonДля них - задача-прим - гарантировать отсутсвие лагов

Насколько я могу судить по современным играм, их задача - выпустить игру хоть как-то. Лаги
и глюки отлавливаются потом да и то если время от подготовки следующего аддона останется.

Не знаю о каком геймдеве мы говорим. Но крупно-конторы содержат целый штат
платных тестировщиков которые следят за перформансом игры.
...
Рейтинг: 0 / 0
22.11.2020, 19:59
    #40021143
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
maytonНо крупно-конторы содержат целый штат платных тестировщиков которые следят за перформансом
игры.

Blizzard и Wizards of the Coast, очевидно, недостаточно крупные конторы. На всё прочее у
меня просто железа не хватает, такой там перформанс.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
22.11.2020, 20:11
    #40021148
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
Я уже лет 10 не играл в десктопные игры. КМК если ты современный
геймер - то надо покупать или XBox или PS4.
...
Рейтинг: 0 / 0
22.11.2020, 22:17
    #40021190
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
А вот еще недавно обсуждали.

https://stadia.google.com/

Тут сильное железо не надо. Главное - сетка с низким лагом.
...
Рейтинг: 0 / 0
23.11.2020, 01:36
    #40021225
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пятничные нотификации
Я помог собрать дочке комп для игр. Уложился а 600, + ещё 600 за видеокарту. Тянет все, 60-120fps.

Дочка довольна, "сама собрала".

Ps5 пока недоступна, дефицит
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пятничные нотификации / 25 сообщений из 39, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]