Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Пятничные нотификации  [new]
CEMb
Member

Откуда: Столько
Сообщений: 2129
Архитектурный вопрос.

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

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

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

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

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

Какие есть варианты для такой архитектуры? Этот тоже норм?
21 ноя 20, 11:47    [22236352]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
mayton
Member

Откуда: loopback
Сообщений: 49785
В UI строительстве раньше использовался шаблон Document-View.

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

Посмотри какой из них ближе к тебе.
21 ноя 20, 11:54    [22236355]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51787

CEMb
Какие есть варианты для такой архитектуры?

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

Назачем городить такую слоёнку? Каждая подсистема имеет свой интерфейс. Остальные системы
просто используют эти интерфейсы по необходимости. Произошло что-то, требующее "отметки в
UI"? Просто вызови соответствующую функцию UI-шного интерфейса. Что и как она будет делать
внутри - не твоё дело.

Posted via ActualForum NNTP Server 1.5

21 ноя 20, 13:34    [22236380]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
PetroNotC Sharp
Member

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

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

При наступлении события обработчики сначала срабатывают на самом вложенном элементе, затем на его родителе, затем выше и так далее, вверх по цепочке вложенности.

https://learn.javascript.ru/event-bubbling
21 ноя 20, 14:06    [22236384]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
mayton
Member

Откуда: loopback
Сообщений: 49785
CEMb

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

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

Нотификация - предполагает месседжинг. Тоесть существование среды где месседж путешествует отдельно от вызвавшего
его процесса или потока.
21 ноя 20, 17:28    [22236422]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 760
CEMb,


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

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

А если одному объекту, не UI, захотелось получить определенные оповещения?
A если произошло асинхронное событие в недрах?
А если многопоточность? В каком потоке приходят сообщения?
21 ноя 20, 18:08    [22236429]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6536
НеофитSQL
UI наверху, и всем управляет

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

Сообщение было отредактировано: 21 ноя 20, 18:15
21 ноя 20, 18:19    [22236430]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 760
PetroNotC Sharp
НеофитSQL
UI наверху, и всем управляет

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


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

Для программистов винды довольно типично забыть про headless и командную строку, и поставить UI во главе всего взаимодействия компонент.
Это один из подходов, и он может работать.
21 ноя 20, 18:38    [22236433]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51787

НеофитSQL
Для программистов винды довольно типично забыть про headless и командную строку, и
поставить UI во главе всего взаимодействия компонент.

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

Posted via ActualForum NNTP Server 1.5

21 ноя 20, 18:42    [22236434]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
mayton
Member

Откуда: loopback
Сообщений: 49785
Я так понимаю что бесполезно обсуждать нотификации UI без понимания устойчивых практик
целевого языка или runtime. Тоесть наличие у нас во главе тех-задания
Delphi. Java/FX/Swing, Windows/MFC/WPF/Qt, Linux/Gnome, Linux/KDE, Generic/Qt
будет оказывать сильное воздействие на реализацию. Даже более
сильное чем нам хотелось-бы.

Как-то так.
21 ноя 20, 19:36    [22236446]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 760
mayton,

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

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

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

Я даже скажу, это правильное решение по умолчанию для большинства приложений с UI.
21 ноя 20, 20:06    [22236454]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6536
Dimitry Sibiryakov
Особенно для программистов Дельфи, которые программируют в основном мышкой.
далось тебе это дельфи. Там не особо сильно отличается от программирования на Си.

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

ну да, все мы состоим из атомомов и единиц и нулей.
И сам по себе атом золота ничем не хуже атома Г...
Только это все не относится к теме.
21 ноя 20, 20:26    [22236457]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6536
mayton,
да. Я тоже считаю, что архитектуру определяет платформа на которой пишем.
Но ТС обычно всё всё пишет с нуля. Так труднее.
21 ноя 20, 20:31    [22236459]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
CEMb
Member

Откуда: Столько
Сообщений: 2129
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
Но ТС обычно всё всё пишет с нуля. Так труднее.
Да ну не всегда :) Я стараюсь один раз писать с нуля, потом этот код использовать
А вообще, я вот смотрю на плюсы и на яву, для меня вот загадка, как в яве так получается, что все про все библиотеки знают? А с плюсами не так, я читаю телеграмчик, и там постоянно дают ссылки на какие-то полезные вещи, про которые я вообще не знал.
22 ноя 20, 11:21    [22236517]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
mayton
Member

Откуда: loopback
Сообщений: 49785
Каждый кодер должен хоть раз в жизни написать свои "танчики".
22 ноя 20, 11:49    [22236522]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51787

CEMb
Как было:
Как стало:

Не вижу разницы. В обоих случаях объекты занимаются тем, что не входит в их круг
обязанностей и лезут туда, куда им не надо.

Но раз ты доволен - всё хорошо.

Posted via ActualForum NNTP Server 1.5

22 ноя 20, 13:28    [22236535]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
mayton
Member

Откуда: loopback
Сообщений: 49785
Разработчики game-dev не очень соблюдают философии SOLID.

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

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

Тоесть на "Кривой Шипилёва" они стоят в зоне разворота когда качество кода
ухудшается в 2 раза ради 5% ускорения алгоритма. И дальше можно
ускорить на 10% ухудшив код в 2000 раз. И так далее. Пока не будет простыня
из ассемблера где нет ни объектов ни RTTI, только чистый конечный автомат.
22 ноя 20, 17:28    [22236603]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51787

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

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

Posted via ActualForum NNTP Server 1.5

22 ноя 20, 18:16    [22236613]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 760
CEMb,

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


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

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

Мое личное мнение что архитектура в смысле ОО улучшилась, эффект на скорость вряд ли заметный.
22 ноя 20, 19:02    [22236633]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51787

НеофитSQL
Игра интенсивно экран перерисовывает 30-100фпс, пушка является неотъемлемой частью игры,
прятать ее за объектом танка вряд ли полезно.

Пушка-объект интерфейса и пушка-элемент игрового мира это два разных объекта,
просчитываемые и обрабатываемые двумя разными модулями независимо. Лично мне так кажется.

Posted via ActualForum NNTP Server 1.5

22 ноя 20, 19:13    [22236637]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
mayton
Member

Откуда: loopback
Сообщений: 49785
Dimitry Sibiryakov

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

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

Не знаю о каком геймдеве мы говорим. Но крупно-конторы содержат целый штат
платных тестировщиков которые следят за перформансом игры.
22 ноя 20, 19:45    [22236655]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51787

mayton
Но крупно-конторы содержат целый штат платных тестировщиков которые следят за перформансом
игры.

Blizzard и Wizards of the Coast, очевидно, недостаточно крупные конторы. На всё прочее у
меня просто железа не хватает, такой там перформанс.

Posted via ActualForum NNTP Server 1.5

22 ноя 20, 19:59    [22236670]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
mayton
Member

Откуда: loopback
Сообщений: 49785
Я уже лет 10 не играл в десктопные игры. КМК если ты современный
геймер - то надо покупать или XBox или PS4.
22 ноя 20, 20:11    [22236677]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
mayton
Member

Откуда: loopback
Сообщений: 49785
А вот еще недавно обсуждали.

https://stadia.google.com/

Тут сильное железо не надо. Главное - сетка с низким лагом.
22 ноя 20, 22:17    [22236780]     Ответить | Цитировать Сообщить модератору
 Re: Пятничные нотификации  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 760
Я помог собрать дочке комп для игр. Уложился а 600, + ещё 600 за видеокарту. Тянет все, 60-120fps.

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

Ps5 пока недоступна, дефицит
23 ноя 20, 01:36    [22236877]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / C++ Ответить