|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Во первых, у каждого VIEW свой контроллер. То есть они всегда зависимы. Во вторых, ты можешь добавить интерфейс и связать через него. ... Минус сигналов и слотов, то что я сегодня случайно перенес функцию из паблик в привате. И крындец. Молча и не сообщая функция не вызывалась. Никаких хинтов компилятора и райзе в рантайм. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 19:28 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Ты главное найди границу слабосвязанных объектов и оверхед. Она есть. И можно нагородить опять 100 слабосвязанных классов. У которых "меню-найди использование метода под курсором" ничего не покажет. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 19:34 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKПотоки ОЧЕНЬ нужныPetroNotC SharpТогда мне нравится подход MS в шарпе.Да, вот у меня была похожая ситуация. Я тут обнаружил такую приятную штуку в плюсах. в <future> есть async, который позволяет в потоке запустить любую функцию или метод класса, форварднув в него нужные параметры. Немного напомнило acync/await, не совсем конечно, но тоже довольно удобно тем, что не надо создавать отдельную функцию для потока и прокидывать туда параметры, написал в одну строчку и забыл. Мне кучу времени и места в коде сэкономило. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 06:52 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
CEMb, Да. В MS они настолько пул потоков спрятали, что даже оторопь берет. Никаких Thread создавать не нужно. Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 07:15 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Для передачи информации о том, какие клавиши нажал пользователь решил использовать паттерн "Наблюдатель" . По логике интерфейс Observer как раз отлично ложится в более верхний уровень (от него все зависят) и по одной "ветке" получает события, а по второй- "спускает" конкретную задачу непосредственному исполнителю. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 10:19 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, А зачем это в Qt? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 10:41 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpSeriyK, А зачем это в Qt? Вы за нитью беседы следите? По совету форумчан я решил разделить программу на независимые подсистемы, выстроив многоуровневую архитектуру. Qt- фреймворк, т.е. низкоуровневая деталь (возможно с течением времени этот фреймворк будет заменен). Поэтому от Qt этот вопрос совершенно не зависит. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 12:05 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Слежу. Передача клавиши это слишком мелко для передачи между крупными модулями. За мыслью следите? Можно крупнее - паттерн Команда. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 13:00 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpSeriyK, Слежу. Передача клавиши это слишком мелко для передачи между крупными модулями. За мыслью следите? Можно крупнее - паттерн Команда. Спасибо, но для простого запуска обработки "Наблюдателя" вполне достаточно, при этом он значительно проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 14:21 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Может на пару дней прикрыть топик? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 16:22 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
mayton, Имхо. Если автор не спрашивает, то тут никто не пишет. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 16:26 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Народ, пожалуйста, подскажите решение: Есть две независимые друг от друга подсистемы (которые хочется сохранить независимыми): одна из них добивается получения результата из инета (в цикле повторяет запрос к внешнему ресурсу), а вторая- выполняет этот самый запрос. Проблема в том, что получение из инета может быть с ошибкой и надо как- то из второй подсистемы сообщить первой о необходимости повтора запроса. И тут они становятся зависимыми друг от друга! Например, если в первой подсистеме (где бесконечный цикл) определить набор исключений, который в случае ошибки будет выбрасывать вторая подсистема, то надо эти исключения сделать доступными во второй подсистеме (и подсистемы становятся зависимыми). Если я буду использовать в качестве возвращаемого значения какие- то текстовые строки, то это по сути тот же вариант, но более колхозный (зависимость остается, но с уровня доступности классов переходит на логический уровень: надо в обоих модулях одинаково понимать соответствие стррокового значения произошедшей ситуации). Использовать паттерн "Наблюдатель" не очень удобно, поскольку вторая подсистема (запрос в инет) возращает полученное значение и потому после уведомления об ошибке (которые могут происходит несколько раз подряд) начнется раскручивание стека с пустыми возвращаемыми значениями... Есть какое- то симпатичное решение? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 17:52 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKПроблема в том, что получение из инета может быть с ошибкой и надо как- то из второй подсистемы сообщить первой о необходимости повтора запроса. Если ошибка произошла при получении, то как дело вообще дошло до второй подсистемы? По мне так: первая система принимает запрос (полностью) и посылает второй подсистеме задание "вот запрос, выполни, ответ засунь в эту дырочку (сокет)". Все, первая система больше не при делах. Вторая выполняет запрос и засовывает либо его результат, либо отлуп в указанную дырочку. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 18:15 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovЕсли ошибка произошла при получении, то как дело вообще дошло до второй подсистемы? Есть две независимые подсистемы: одна выполняет запрос в инет, другая выполняет в цикле ЛЮБОЕ действие до получения результата (ее задача- добиться результата в ненадежной ситуации). В цикле как раз и крутится выполнение запроса в инет и потому нет ничего удивительного, что при получении ошибки в подсистеме работы с интернетом об этом известно в первую очередь. Dimitry SibiryakovПо мне так: первая система принимает запрос (полностью) и посылает второй подсистеме задание "вот запрос, выполни, ответ засунь в эту дырочку (сокет)". Все, первая система больше не при делах. Вторая выполняет запрос и засовывает либо его результат, либо отлуп в указанную дырочку. Если возвращать "отлуп", то о нем надо ДОГОВОРИТЬСЯ обеим подсистемам: повторить запрос / пропустить эти данные (они не получаемы в принципе) / надо немного подождать и повторить запрос (превышен лимит сервера)? Т.е. появляется зависимость между двумя подсистемами, которые по логике независимы друг от друга. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 18:27 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKДОГОВОРИТЬСЯпридется договариваться. Ошибки делят на уровни. Фатальная, варнинг, и т.д. Далее, главная система должна точно задать количество повторов после которых считается что запрос неу пешен и его не будет. Ресурс в дауне. Не бывает абсолютной независимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 19:28 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Термин "черный ящик" учили? У него есть вход и выход. У вас 2 ящика. Как считаете, они зависимы?)) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 19:31 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Есть другой вариант архитектуры - реактивное программирование. Но не думаю что вы готовы и в данном ЯП есть средства для этого. Там система для веб главная. Остальные ждут от неё стрим с данными. Покс стрима нет в остальных ничего не происходит. Поток данных из веб - двигатель всего остального. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 19:36 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpНе бывает абсолютной независимости. Разумеется зависимость будет, но есть разные способы внедрения зависимостей: через интерфейс, через общий "над-уровнь", глобальные переменные.... Мне хочется найти самую слабую зависимость. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 19:38 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKсамую слабую зависимость.цель оправдывает средства? Или наоборот? А если вместо 100 будет 200 классов? Устроит? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 19:41 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Ну и вы путаете связи и бизнес логику (БЛ). "если запрос не выполнится в течении 15 сек, то задействовать модуль #5 - это бизнес логика описываемая в ТЗ от заказчика. Как вы это выполните со слабой связанностью? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 19:47 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKЕсть две независимые подсистемы: одна выполняет запрос в инет, другая выполняет в цикле ЛЮБОЕ действие до получения результатавыше говорил, что делят независимые по островам Функциональности. Там легче делить. А ты разрезал по живому - там где запросОтвет. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 20:02 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKМне хочется найти самую слабую зависимость. Самая слабая зависимость - при общении через очередь. Какой-нибудь ZeroMQ позволит вообще эти подсистемы разнести по разным серверам. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 20:09 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Да. Шина еще есть. Можно послать запрос так далеко, что ответ будет никому не нужен)) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 20:19 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpА ты разрезал по живому - там где запросОтвет. Удачи! Получается, что выделение универсального функционала (в моем случае это подсистема гарантированного выполнения переданной функции) противоречит модульности системы? И если у меня в нескольких местах необходимо использовать один и тот же универсальный функционал, то во всех этих местах его надо дублировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 08:22 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovСамая слабая зависимость - при общении через очередь. Какой-нибудь ZeroMQ позволит вообще эти подсистемы разнести по разным серверам. Вопрос не в способе доставки, а во взаимо- понимании (договоренности) двух подсистем. Повторюсь, что могу без лишних объектов (таких как очередь) бросить исключение, и оно само поднимется выше по стеку и передаст информацию о произошедшем. Вопрос в том, чтобы выше по стеку поняли как себя вести в этой ситуации. Возможно одно из двух: 1. Ниже по стеку должны знать потенциальные варианты действий подсистемы, находящейся выше по стеку (и подготавливали данные исходя из этого, сообщая об ошибке). 2. Выше по стеку умели интерпретировать результаты того, что происходит ниже. Введение промежуточного объекта ("переводчика" с языка одной подсистемы на язык другой) не изменит ситуацию, поскольку зависимость будет существовать через него. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 08:33 |
|
|
start [/forum/topic.php?fid=57&msg=39825105&tid=2017607]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 141ms |
0 / 0 |