powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как сделать проект более структурно понятным?
25 сообщений из 170, страница 5 из 7
Как сделать проект более структурно понятным?
    #39822493
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyK,
Во первых, у каждого VIEW свой контроллер. То есть они всегда зависимы.
Во вторых, ты можешь добавить интерфейс и связать через него.
...
Минус сигналов и слотов, то что я сегодня случайно перенес функцию из паблик в привате.
И крындец. Молча и не сообщая функция не вызывалась.
Никаких хинтов компилятора и райзе в рантайм.
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39822499
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyK,
Ты главное найди границу слабосвязанных объектов и оверхед.
Она есть. И можно нагородить опять 100 слабосвязанных классов.
У которых "меню-найди использование метода под курсором" ничего не покажет.
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39822594
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyKПотоки ОЧЕНЬ нужныPetroNotC SharpТогда мне нравится подход MS в шарпе.Да, вот у меня была похожая ситуация. Я тут обнаружил такую приятную штуку в плюсах.
в <future> есть async, который позволяет в потоке запустить любую функцию или метод класса, форварднув в него нужные параметры. Немного напомнило acync/await, не совсем конечно, но тоже довольно удобно тем, что не надо создавать отдельную функцию для потока и прокидывать туда параметры, написал в одну строчку и забыл. Мне кучу времени и места в коде сэкономило.
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39822596
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb,
Да.
В MS они настолько пул потоков спрятали, что даже оторопь берет.
Никаких Thread создавать не нужно.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
.... 
... 
await function_async();
//сюда ВЕРНЕТСЯ КОД КОГДА БУДЕТ ВЫПОЛНЕНА В ФОНЕ function_async() 
... 
.... 
MessageBox(. Все выполнено. 
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39822666
SeriyK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для передачи информации о том, какие клавиши нажал пользователь решил использовать паттерн "Наблюдатель" . По логике интерфейс Observer как раз отлично ложится в более верхний уровень (от него все зависят) и по одной "ветке" получает события, а по второй- "спускает" конкретную задачу непосредственному исполнителю.
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39822678
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyK,
А зачем это в Qt?
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39822747
SeriyK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC SharpSeriyK,
А зачем это в Qt?

Вы за нитью беседы следите? По совету форумчан я решил разделить программу на независимые подсистемы, выстроив многоуровневую архитектуру. Qt- фреймворк, т.е. низкоуровневая деталь (возможно с течением времени этот фреймворк будет заменен). Поэтому от Qt этот вопрос совершенно не зависит.
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39822785
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyK,
Слежу.
Передача клавиши это слишком мелко для передачи между крупными модулями.
За мыслью следите?
Можно крупнее - паттерн Команда.
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39822845
SeriyK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC SharpSeriyK,
Слежу.
Передача клавиши это слишком мелко для передачи между крупными модулями.
За мыслью следите?
Можно крупнее - паттерн Команда.

Спасибо, но для простого запуска обработки "Наблюдателя" вполне достаточно, при этом он значительно проще.
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39822938
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может на пару дней прикрыть топик?
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39822941
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Имхо. Если автор не спрашивает, то тут никто не пишет.
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39825056
SeriyK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, пожалуйста, подскажите решение:

Есть две независимые друг от друга подсистемы (которые хочется сохранить независимыми): одна из них добивается получения результата из инета (в цикле повторяет запрос к внешнему ресурсу), а вторая- выполняет этот самый запрос.

Проблема в том, что получение из инета может быть с ошибкой и надо как- то из второй подсистемы сообщить первой о необходимости повтора запроса. И тут они становятся зависимыми друг от друга!

Например, если в первой подсистеме (где бесконечный цикл) определить набор исключений, который в случае ошибки будет выбрасывать вторая подсистема, то надо эти исключения сделать доступными во второй подсистеме (и подсистемы становятся зависимыми). Если я буду использовать в качестве возвращаемого значения какие- то текстовые строки, то это по сути тот же вариант, но более колхозный (зависимость остается, но с уровня доступности классов переходит на логический уровень: надо в обоих модулях одинаково понимать соответствие стррокового значения произошедшей ситуации).

Использовать паттерн "Наблюдатель" не очень удобно, поскольку вторая подсистема (запрос в инет) возращает полученное значение и потому после уведомления об ошибке (которые могут происходит несколько раз подряд) начнется раскручивание стека с пустыми возвращаемыми значениями...

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

Если ошибка произошла при получении, то как дело вообще дошло до второй подсистемы?

По мне так: первая система принимает запрос (полностью) и посылает второй подсистеме
задание "вот запрос, выполни, ответ засунь в эту дырочку (сокет)". Все, первая система
больше не при делах. Вторая выполняет запрос и засовывает либо его результат, либо отлуп в
указанную дырочку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39825079
SeriyK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovЕсли ошибка произошла при получении, то как дело вообще дошло до второй подсистемы?

Есть две независимые подсистемы: одна выполняет запрос в инет, другая выполняет в цикле ЛЮБОЕ действие до получения результата (ее задача- добиться результата в ненадежной ситуации). В цикле как раз и крутится выполнение запроса в инет и потому нет ничего удивительного, что при получении ошибки в подсистеме работы с интернетом об этом известно в первую очередь.

Dimitry SibiryakovПо мне так: первая система принимает запрос (полностью) и посылает второй подсистеме
задание "вот запрос, выполни, ответ засунь в эту дырочку (сокет)". Все, первая система
больше не при делах. Вторая выполняет запрос и засовывает либо его результат, либо отлуп в
указанную дырочку.


Если возвращать "отлуп", то о нем надо ДОГОВОРИТЬСЯ обеим подсистемам: повторить запрос / пропустить эти данные (они не получаемы в принципе) / надо немного подождать и повторить запрос (превышен лимит сервера)? Т.е. появляется зависимость между двумя подсистемами, которые по логике независимы друг от друга.
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39825096
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyKДОГОВОРИТЬСЯпридется договариваться.
Ошибки делят на уровни. Фатальная, варнинг, и т.д.
Далее, главная система должна точно задать количество повторов после которых считается что запрос неу пешен и его не будет. Ресурс в дауне.
Не бывает абсолютной независимости.
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39825097
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyK,

Термин "черный ящик" учили?
У него есть вход и выход.
У вас 2 ящика. Как считаете, они зависимы?))
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39825101
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть другой вариант архитектуры - реактивное программирование.
Но не думаю что вы готовы и в данном ЯП есть средства для этого.
Там система для веб главная. Остальные ждут от неё стрим с данными. Покс стрима нет в остальных ничего не происходит.
Поток данных из веб - двигатель всего остального.
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39825102
SeriyK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC SharpНе бывает абсолютной независимости.

Разумеется зависимость будет, но есть разные способы внедрения зависимостей: через интерфейс, через общий "над-уровнь", глобальные переменные....

Мне хочется найти самую слабую зависимость.
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39825104
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyKсамую слабую зависимость.цель оправдывает средства? Или наоборот?
А если вместо 100 будет 200 классов?
Устроит?
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39825105
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyK,
Ну и вы путаете связи и бизнес логику (БЛ).
"если запрос не выполнится в течении 15 сек, то задействовать модуль #5 - это бизнес логика описываемая в ТЗ от заказчика.
Как вы это выполните со слабой связанностью?
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39825108
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyKЕсть две независимые подсистемы: одна выполняет запрос в инет, другая выполняет в цикле ЛЮБОЕ действие до получения результатавыше говорил, что делят независимые по островам Функциональности.
Там легче делить.
А ты разрезал по живому - там где запросОтвет.
Удачи!
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39825109
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeriyKМне хочется найти самую слабую зависимость.

Самая слабая зависимость - при общении через очередь. Какой-нибудь ZeroMQ позволит вообще
эти подсистемы разнести по разным серверам.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39825112
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
Да.
Шина еще есть.
Можно послать запрос так далеко, что ответ будет никому не нужен))
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39825183
SeriyK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC SharpА ты разрезал по живому - там где запросОтвет.
Удачи!

Получается, что выделение универсального функционала (в моем случае это подсистема гарантированного выполнения переданной функции) противоречит модульности системы? И если у меня в нескольких местах необходимо использовать один и тот же универсальный функционал, то во всех этих местах его надо дублировать?
...
Рейтинг: 0 / 0
Как сделать проект более структурно понятным?
    #39825185
SeriyK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovСамая слабая зависимость - при общении через очередь. Какой-нибудь ZeroMQ позволит вообще
эти подсистемы разнести по разным серверам.


Вопрос не в способе доставки, а во взаимо- понимании (договоренности) двух подсистем. Повторюсь, что могу без лишних объектов (таких как очередь) бросить исключение, и оно само поднимется выше по стеку и передаст информацию о произошедшем. Вопрос в том, чтобы выше по стеку поняли как себя вести в этой ситуации. Возможно одно из двух:
1. Ниже по стеку должны знать потенциальные варианты действий подсистемы, находящейся выше по стеку (и подготавливали данные исходя из этого, сообщая об ошибке).
2. Выше по стеку умели интерпретировать результаты того, что происходит ниже.

Введение промежуточного объекта ("переводчика" с языка одной подсистемы на язык другой) не изменит ситуацию, поскольку зависимость будет существовать через него.
...
Рейтинг: 0 / 0
25 сообщений из 170, страница 5 из 7
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как сделать проект более структурно понятным?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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