powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Пятничные нотификации
25 сообщений из 39, страница 1 из 2
Пятничные нотификации
    #40020973
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Архитектурный вопрос.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

ну да, все мы состоим из атомомов и единиц и нулей.
И сам по себе атом золота ничем не хуже атома Г...
Только это все не относится к теме.
...
Рейтинг: 0 / 0
Пятничные нотификации
    #40021031
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
да. Я тоже считаю, что архитектуру определяет платформа на которой пишем.
Но ТС обычно всё всё пишет с нуля. Так труднее.
...
Рейтинг: 0 / 0
Пятничные нотификации
    #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
Пятничные нотификации
    #40021067
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каждый кодер должен хоть раз в жизни написать свои "танчики".
...
Рейтинг: 0 / 0
Пятничные нотификации
    #40021076
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbКак было:
Как стало:
Не вижу разницы. В обоих случаях объекты занимаются тем, что не входит в их круг
обязанностей и лезут туда, куда им не надо.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

https://stadia.google.com/

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

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

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


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