|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
Архитектурный вопрос. Есть у вас проект. Есть у вас слой приложения. Есть у вас слой UI. Есть у вас слой логики/транспорта/чего-то ещё. И вот где-то в недрах у вас происходит нечто, что надо отобразить в UI. Вот прям сейчас в проекте я делал так: приложение управляет объектами, тут же проверяет какие-то их параметры, и если что, то делает отметки в UI. А потот я решил сделать "правильно" и выкинуть весь этот код из слоя приложения. Потому что уж много там делализаций получается. То есть было, грубо если, так: Приложение управляет объектами 1-го уровня, получает от них объекты 2-го уровня, от них 3-го уровня и делает выводы. Стало: Приложение работает с объектами 1-го уровня. Объекты любых уровней, если что случилось, собирают нотификацию, отправляют её родителю, он лепит свой id в хвост и отправляет выше, и так далее. Отправка - просто вызов функции с vector<string> ref. На верхнем уровне приложение парсит вектор и делает действия. Какие есть варианты для такой архитектуры? Этот тоже норм? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 11:47 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
В UI строительстве раньше использовался шаблон Document-View. Сейчас его заменяют на MVC (Model-View-Controller), MVP (Model-View-Presenter), и MVVM (Не помню расшифровку). Посмотри какой из них ближе к тебе. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 11:54 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
CEMbКакие есть варианты для такой архитектуры? "50 оттенков серого." Назачем городить такую слоёнку? Каждая подсистема имеет свой интерфейс. Остальные системы просто используют эти интерфейсы по необходимости. Произошло что-то, требующее "отметки в UI"? Просто вызови соответствующую функцию UI-шного интерфейса. Что и как она будет делать внутри - не твоё дело. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 13:34 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
CEMb То есть было, грубо если, так: Приложение управляет объектами 1-го уровня, получает от них объекты 2-го уровня, от них 3-го уровня и делает выводы. Не по ООП. Надо делить не по уровням а по функционалу. Умный объект - Карта. Она сама показывает изменения, сама сохраняет настройки в файл если ей дали имя-путь и сама рисует на HDC переданный в параметре. Тогда приложение управляет умными объектами. А нотификация или сообщения сами всплывают вверх в каждом объекте таким как карты, список выпадающий, светофор, будильник. JSОсновной принцип всплытия: При наступлении события обработчики сначала срабатывают на самом вложенном элементе, затем на его родителе, затем выше и так далее, вверх по цепочке вложенности. https://learn.javascript.ru/event-bubbling ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 14:06 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
CEMb Приложение работает с объектами 1-го уровня. Объекты любых уровней, если что случилось, собирают нотификацию, отправляют её родителю, он лепит свой id в хвост и отправляет выше, и так далее. Отправка - просто вызов функции с vector<string> ref. Немного не согласен с терминологией. Нотификация - предполагает месседжинг. Тоесть существование среды где месседж путешествует отдельно от вызвавшего его процесса или потока. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 17:28 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
CEMb, Я в нескольких не-ОО проектах так сделал обработку ошибок. Событие (ошибка) возвращалась в предыдущий уровень, обобщалась (если код был слишком специализированный), обрастала именами слоев и наверху была похожа на стэк трейс. Но это синхронный вызов, от первого уровня. У вас в дизайне есть негласное утверждение что UI наверху, и всем управляет. Синхронно вызывает методы, парсит векторы сообщений и решает что делать дальше. А если одному объекту, не UI, захотелось получить определенные оповещения? A если произошло асинхронное событие в недрах? А если многопоточность? В каком потоке приходят сообщения? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 18:08 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
НеофитSQL UI наверху, и всем управляет Если такая модель типа клиент-сервер, то сервер не может вызывать и оповещать клиентов. Только клиенты могут опрашивать сервер - "нет ли что для меня?". ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 18:19 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
PetroNotC Sharp НеофитSQL UI наверху, и всем управляет Если такая модель типа клиент-сервер, то сервер не может вызывать и оповещать клиентов. Только клиенты могут опрашивать сервер - "нет ли что для меня?". У клиент-сервера жизненный цикл клиента не совпадает с сервером, там ещё нужен "я новый клиент, дай начальное состояние". Для программистов винды довольно типично забыть про headless и командную строку, и поставить UI во главе всего взаимодействия компонент. Это один из подходов, и он может работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 18:38 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
НеофитSQLДля программистов винды довольно типично забыть про headless и командную строку, и поставить UI во главе всего взаимодействия компонент. Особенно для программистов Дельфи, которые программируют в основном мышкой. UI модуль, крутящийся в своём потоке, ничем не хуже и не лучше любого другого модуля, занимающего свой собственный поток. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 18:42 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
Я так понимаю что бесполезно обсуждать нотификации UI без понимания устойчивых практик целевого языка или runtime. Тоесть наличие у нас во главе тех-задания Delphi. Java/FX/Swing, Windows/MFC/WPF/Qt, Linux/Gnome, Linux/KDE, Generic/Qt будет оказывать сильное воздействие на реализацию. Даже более сильное чем нам хотелось-бы. Как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 19:36 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
mayton, Обсуждать можно, советовать вряд ли. Слишком мало известно о проекте. Судя по форуму, проект в с++. Судя по стилю программирования, наверное винда. Если у ТС вопрос бывает ли так - бывает. У UI-centric апликух богатая история, они пока никуда не исчезают. У этой архитектуры есть несколько недостатков, некоторые из которых я упомянул в своем первом ответе. Эти недостатки могут быть совершенно несущественными для ТС, если программа остаётся монолитно-однопоточной без внешних функций управления. Я даже скажу, это правильное решение по умолчанию для большинства приложений с UI. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 20:06 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Особенно для программистов Дельфи, которые программируют в основном мышкой. Dimitry Sibiryakov UI модуль, крутящийся в своём потоке, ничем не хуже и не лучше любого другого модуля, занимающего свой собственный поток. ну да, все мы состоим из атомомов и единиц и нулей. И сам по себе атом золота ничем не хуже атома Г... Только это все не относится к теме. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 20:26 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
mayton, да. Я тоже считаю, что архитектуру определяет платформа на которой пишем. Но ТС обычно всё всё пишет с нуля. Так труднее. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2020, 20:31 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
mayton В UI строительстве раньше использовался шаблон Document-View. Dimitry Sibiryakov Назачем городить такую слоёнку? Каждая подсистема имеет свой интерфейс. Остальные системы просто используют эти интерфейсы по необходимости. Произошло что-то, требующее "отметки в UI"? Просто вызови соответствующую функцию UI-шного интерфейса. Что и как она будет делать внутри - не твоё дело. У меня есть танк. Есть игра(приложение), которая рулит UI. У танка есть внутренние объекты, типа "оружие", одно из них пушка. Танк едет по полю и собирает ящик с особыми припасами, 20 штук. Тут надо на UI это отобразить, нарисовать значок и 20. А по мере стрельбы, цифру уменьшать, когда будет ровна нулю, значок убрать. Как было: игра на каждом шагу лезет в танк, находит у него пушку и в пушен проверяет количество особых припасов - изменяет UI. Как стало: пушка, когда получает/теряет припасы, собирает нотификацию для танка, танк передаёт её в игру, игра делает отметки в UI. Т.е. есть иерархия классов, и где-то на нижних уровнях объекты хотят оповестить приложение на самом верху. PetroNotC Sharp Надо делить не по уровням а по функционалу. Умный объект - Карта. Она сама показывает изменения, сама сохраняет настройки в файл если ей дали имя-путь и сама рисует на HDC переданный в параметре. Тогда приложение управляет умными объектами. mayton Нотификация - предполагает месседжинг. НеофитSQL А если одному объекту, не UI, захотелось получить определенные оповещения? A если произошло асинхронное событие в недрах? А если многопоточность? В каком потоке приходят сообщения? НеофитSQL Обсуждать можно, советовать вряд ли. PetroNotC Sharp Но ТС обычно всё всё пишет с нуля. Так труднее. А вообще, я вот смотрю на плюсы и на яву, для меня вот загадка, как в яве так получается, что все про все библиотеки знают? А с плюсами не так, я читаю телеграмчик, и там постоянно дают ссылки на какие-то полезные вещи, про которые я вообще не знал. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 11:21 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
Каждый кодер должен хоть раз в жизни написать свои "танчики". ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 11:49 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
CEMbКак было: Как стало: Не вижу разницы. В обоих случаях объекты занимаются тем, что не входит в их круг обязанностей и лезут туда, куда им не надо. Но раз ты доволен - всё хорошо. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 13:28 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
Разработчики game-dev не очень соблюдают философии SOLID. Для них - задача-прим - гарантировать отсутсвие лагов и чтоб кеши L1/L2 были прогреты нужными данными. По сути они - уродуют и калечат красивый код в угоду требованиям капризных пользователей. Тоесть на "Кривой Шипилёва" они стоят в зоне разворота когда качество кода ухудшается в 2 раза ради 5% ускорения алгоритма. И дальше можно ускорить на 10% ухудшив код в 2000 раз. И так далее. Пока не будет простыня из ассемблера где нет ни объектов ни RTTI, только чистый конечный автомат. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 17:28 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
maytonДля них - задача-прим - гарантировать отсутсвие лагов Насколько я могу судить по современным играм, их задача - выпустить игру хоть как-то. Лаги и глюки отлавливаются потом да и то если время от подготовки следующего аддона останется. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 18:16 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
CEMb, авторКак стало: пушка, когда получает/теряет припасы, собирает нотификацию для танка, танк передаёт её в игру, игра делает отметки в UI. Если раньше был опрос пушки-объекта, а теперь уведомление от танка-объекта, то особой разницы по-моему нет. Игра интенсивно экран перерисовывает 30-100фпс, пушка является неотъемлемой частью игры, прятать ее за объектом танка вряд ли полезно. Синхронные уведомления мало отличаются от опроса, когда выстрел инициируется из UI. В случае с подбираем снарядов (внешнее событие), уведомление выигрывает. Мое личное мнение что архитектура в смысле ОО улучшилась, эффект на скорость вряд ли заметный. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 19:02 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
НеофитSQLИгра интенсивно экран перерисовывает 30-100фпс, пушка является неотъемлемой частью игры, прятать ее за объектом танка вряд ли полезно. Пушка-объект интерфейса и пушка-элемент игрового мира это два разных объекта, просчитываемые и обрабатываемые двумя разными модулями независимо. Лично мне так кажется. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 19:13 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov maytonДля них - задача-прим - гарантировать отсутсвие лагов Насколько я могу судить по современным играм, их задача - выпустить игру хоть как-то. Лаги и глюки отлавливаются потом да и то если время от подготовки следующего аддона останется. Не знаю о каком геймдеве мы говорим. Но крупно-конторы содержат целый штат платных тестировщиков которые следят за перформансом игры. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 19:45 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
maytonНо крупно-конторы содержат целый штат платных тестировщиков которые следят за перформансом игры. Blizzard и Wizards of the Coast, очевидно, недостаточно крупные конторы. На всё прочее у меня просто железа не хватает, такой там перформанс. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 19:59 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
Я уже лет 10 не играл в десктопные игры. КМК если ты современный геймер - то надо покупать или XBox или PS4. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 20:11 |
|
Пятничные нотификации
|
|||
---|---|---|---|
#18+
А вот еще недавно обсуждали. https://stadia.google.com/ Тут сильное железо не надо. Главное - сетка с низким лагом. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2020, 22:17 |
|
|
start [/forum/topic.php?fid=57&msg=40021021&tid=2017302]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 260ms |
total: | 392ms |
0 / 0 |