|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Написал проект, в котором порядка 100 файлов с различными взаимосвязанными классами. Да, все логично разложено в разные классы без повторов кода и с разделением ответственности. Это привело к тому, что классов и взимосвязей между ними стало много и беглый взгляд на всё это не позволяет уловить основные заложенные идеи. Человеку с улицы разобраться с этим клубком переплетенных ссылок в сотне файлов очень сложно. Как упростить восприятие проекта? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 11:55 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Бить на модули и библиотеки ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 11:57 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Petro123SeriyK, Бить на модули и библиотеки Все уже разбито, но сильно проще не становится. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 12:04 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Это общие слова. Надо конкретику. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 12:08 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKКак упростить восприятие проекта? Попробуй нарисовать UML-диаграмму классов от руки или с графическими средствами. В самом начале рисования у тебя уже скорее всего будут мысли по улучшению. Обычно в самом верху диаграммы должны висеть базовые классы и интерфейсы. Надо постараться подвигать мышкой эти прямоугольнички чтоб они заняли соотв. место вверху. Методов в базовых интерфейсах должно быть немного. В идеале - 1. (ISP) И глубина наследования должна быть не сильно большой. Кода в классах должно быть не сильно много (Single resp.) Вобщем хороший поинт также будет - показать эти диаграмму и код коллегам. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 12:11 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKКак упростить восприятие проекта?открыть для себя doxygen :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 12:34 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
egorychSeriyKКак упростить восприятие проекта?открыть для себя doxygen :) Вы думаете, что текст документации удобно представляет взаимосвязи объектов? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 12:38 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKКак упростить восприятие проекта? Вспомнить основы ОО (инкапсуляция) и избавиться от "взаимосвязей". Есть класс, исполняющий нужную функцию и есть его использование в нужных местах. Всё. А если у вас классы переплетаются как черви, то что-то уже неладно в консерватории. Пишите комментарии. Много комментариев. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 12:41 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovSeriyKКак упростить восприятие проекта? Вспомнить основы ОО (инкапсуляция) и избавиться от "взаимосвязей". Есть класс, исполняющий нужную функцию и есть его использование в нужных местах. Всё. А если у вас классы переплетаются как черви, то что-то уже неладно в консерватории. Пишите комментарии. Много комментариев. ООП не забывалось, но при сотне файлов даже с минимальным набором связей получается достаточно сложная структура. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 12:49 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Главный конструктор обычно в голове все держит)). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 12:49 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKDimitry Sibiryakovпропущено... Вспомнить основы ОО (инкапсуляция) и избавиться от "взаимосвязей". Есть класс, исполняющий нужную функцию и есть его использование в нужных местах. Всё. А если у вас классы переплетаются как черви, то что-то уже неладно в консерватории. Пишите комментарии. Много комментариев. ООП не забывалось, но при сотне файлов даже с минимальным набором связей получается достаточно сложная структура. Такая? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 12:54 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKпри сотне файлов даже с минимальным набором связей получается достаточно сложная структура. Поэтому-то её надо упрощать, превращая в иерархию. Низкоуровневые (возможно, абстрактные) классы и высокоуровневые, использующие их. Использование классов, лежащих выше по иерархии, строго запрещено. Если где-то надо закопать банку червей - заставляете высокоуровневый класс реализовать низкоуровневый интерфейс (благо множественное наследование это позволяет). В этом случае для нижележащих такой класс остаётся низкоуровневым. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 12:58 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Вместе класс mainWindow и getValueINI никогда не смотрят. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 13:47 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKВы думаете, что текст документации удобно представляет взаимосвязи объектов?уверен в этом) сам пользуюсь много лет и всем советую. doxygen и UML рисует по коду и ссылки на использование функций другими методами строит. И стимулирует комментарии писать. И даже их читать иногда) P.S. 100 классов в проекте - это фигня ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 14:10 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Я иногда рисовал yed-ом диаграммы классов. 99% вручную. Делал это задумчиво и обычно сочетая разбор какого-то нового неизвестого мне кода (кажется это был поисковый движок для сети аптек) Пример для Apache Lucene приататчил. Не имею ничего против авто-генераторов диаграмм. Но есть определённый смысл в проделывании дизайнерской работы. Например физическая компоновка сущностей рядом может говорить о их родстве (в одном пакете) или о функционале. Среды разработки обычно это не делают и кидают диаграммы как бог даст. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 15:58 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKКак упростить восприятие проекта? прочитать лучшую книгу по ООП ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 16:46 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKпорядка 100 файлов... если следовать альма-матер учению по ОО от ГрадиБуча, то технология превращения из мысли в код строится на конкретики. Т.е. например бизнес логика должна иметь приблизительно то кол-во сущностей, которым пользуются в жизни люди из жизни в бизнесе. Я например встречал по жизни ну максимум 20-30 сущностей из бизнеса (человек существо конечное)...если добавить различные языковые технологии, области, реализацию и т.п. - то 100-150 классов это очень навёрнутая система должна быть. Либо изначально плохо проведённая декомпозиция задачи. (круглый) ЗЫ Чисто как пример - в исторически сложённом коде было около 1500 сущностей. После проработки бизнес логики - было выявлено около 10-15 классов покрывающих всю бизнес логику. Добавить сюда бд, мультисреадинг, всякие логи-обработки, самописные юаи, сеть, аутпроксерваки и т.п. огород - итого около 100-150.... как то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2019, 18:04 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Сейчас выбрал такой путь: разделение проекта на пакеты, которые работают друг с другом только через интерфейсы. Ну и все классы можно разбросать по отдельным пакетам и рассматривать каждый пакет в отдельности (что должно сильно упростить паутину взаимодействия в проекте). Если видите от чего меня надо предостеречь или куда направить, то буду только рад! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2019, 14:27 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKЕсли видите от чего меня надо предостеречь или куда направить, то буду только рад!внимательнее читать форум). Это решение предлагалось в первом вам ответе топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2019, 15:11 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
У меня есть старый, постоянно дополняемый проект, больше 10 лет. Ядро менялось мало, добавлялись новые фичи: система отчётов, система плагинов, система экспорта-импорта... Физически модули одной системы размещаются в отдельных каталогах файловой системы, при разработке строится отдельное тестовое приложение, при этом слежу за тем, чтобы другие подсистемы не использовались. А если все же что-то из дугих подсистем используется - выношу это "что-то" в ядро. Для важных объектов, используемых за пределами подсистемы, делаются отдельные описания интерфейсов. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2019, 15:52 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKСейчас выбрал такой путь: разделение проекта на пакеты, которые работают друг с другом только через интерфейсы. Ну и все классы можно разбросать по отдельным пакетам и рассматривать каждый пакет в отдельности (что должно сильно упростить паутину взаимодействия в проекте). Если видите от чего меня надо предостеречь или куда направить, то буду только рад! откройте для себя HMVC на примере телефонов: это один для всех отдельный MVC аля микросервис и не надо каждому (клиенты/магазины/банки/итд) свой MVC с телефонами пилить ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2019, 16:09 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKСейчас выбрал такой путь: разделение проекта на пакеты, которые работают друг с другом только через интерфейсы. Ну и все классы можно разбросать по отдельным пакетам и рассматривать каждый пакет в отдельности (что должно сильно упростить паутину взаимодействия в проекте). Если видите от чего меня надо предостеречь или куда направить, то буду только рад!Есть такая штука, как шаблоны проектирования , сейчас очень популярная. Часть из них (шаблон делегирования или мост, например) как раз подходят для решения ваших задач. Попробуйте ознакомится и применить. Дополнительный плюс шаблонов в том, что человек, знакомый с шаблонами, быстрее въезжает в проект, построенный на шаблонах. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.05.2019, 21:26 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Интерфейсы... интерфейсы... почему никто не предложил шаблоны? Там связей вообще нет, и всё статически связано и известно на момент компиляции ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 10:45 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
CEMbИнтерфейсы... интерфейсы... почему никто не предложил шаблоны? Там связей вообще нет, и всё статически связано и известно на момент компиляции разве так бывает? Вызовы без связей? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 11:04 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Шаблон еще более высокоуровневый чем интерфейс. У него даже названия базовых классов и методов - не регламентированы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 11:06 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
maytonШаблон еще более высокоуровневый чем интерфейс. У него даже названия базовых классов и методов - не регламентированы.мммм в других ЯП аналогов нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 11:18 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Шаблон это вообще не про язык. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 11:26 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
maytonШаблон это вообще не про язык.вопрос вроде практический. Значит он не применим к сабжу. Сабж - как из обособленного компонентаА вызвать компонентБ. Тогда все барахло из 20 классов будет инкапсулировано в черном ящике. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 11:31 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKКак упростить восприятие проекта? Да никак. НАпиши документацию -- это будет лучшее. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 13:37 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Petro123вопрос вроде практический. Значит он не применим к сабжу.Я так понял, дело в связях? Т.е. один класс как-то использует другой класс и поэтому где-то надо писать #include? Так вот, шаблон не требует к своим шаблонным параметрам include. У меня есть упоротый проект исключительно на шаблонах, там все include только в одном месте: где идёт объявление всех объектов. Не, я, конечно, лукавлю, на счёт "в одном месте", но все архитектурные вещи друг от друга никак не зависят, они потом в одном месте друг другу в качестве шаблонных параметров передаются. К примеру, у меня есть класс CMetric (это шаблон), который используется всеми другими объектами, так как метрика. И всего 2 include, один в app.cpp, потому что там описание, один в project.cpp, потому он всё это запускает (скорее всего можно от второго избавиться). И эта метрика на вход получает тип данных, и единицу измерения - один раз в коде(и это app.h). По-моему, очень удобно и просто. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 13:57 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
страус очень топит за шаблоны и старательно внедряет в новых версиях C++ ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 17:53 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Мне кажется топик пошел не туда. Здесь имелось 21893948 в виду шаблоны проектирования а не шаблоны функций. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 17:57 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
CEMb, т.е. что бы уменьшить количество классов, нужно перевести их в шаблоны :-)? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 20:09 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
kealon(Ruslan)CEMb, т.е. что бы уменьшить количество классов, нужно перевести их в шаблоны :-)?При применении шаблонов число классов вырастет, зато их связность можно уменьшить. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 21:51 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKНаписал проект, в котором порядка 100 файлов с различными взаимосвязанными классами. Да, все логично разложено в разные классы без повторов кода и с разделением ответственности. Это привело к тому, что классов и взимосвязей между ними стало много и беглый взгляд на всё это не позволяет уловить основные заложенные идеи. Человеку с улицы разобраться с этим клубком переплетенных ссылок в сотне файлов очень сложно. Как упростить восприятие проекта? Количество классов и возможность стороннему разработчику уловить основные идеи коррелируют слабо. Ваша диграмма классов, даже если у вас идеальная архитектура(а такого не бывает) будет скорее запутывать, если вы попытаетесь уместить на ней все и кому-то показать. Да и не интересно, у разработчика сейчас немало вспомогательных средств чтобы понять, как устроен ваш проект. Единственное, что я могу посоветовать, так это назвать ваши сущности коррекно, и, как ни странно, не стесняйтесь комментировать свой код. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 23:19 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Автор пишет про восприятие. А что такое это вообще? Восприятие. Это как он сам воспринимает свой проект. Рискну предположить что восприятие плохое когда код просто плохой или содержит много внутренних противоречий. Или как говорит мой коллега .. код содержит "договорняк" которые не очевиден. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 23:37 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Скорее интересно, что делает каждый конкретный модуль/сервис, и как и с кем он обменивается сообщениями. Т.е. скорее потоки данных ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 23:37 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
При этом у него 100 файлов. По современным меркам - это маленький проект. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2019, 23:41 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
kealon(Ruslan)т.е. что бы уменьшить количество классов, нужно перевести их в шаблоны :-)?чтобы уменьшить число классов, надо уменьшить число классов, но я думаю, проблема не в числе классов у автора. bk0010При применении шаблонов число классов вырастет, зато их связность можно уменьшить.да и число классов не обязательно вырастет. автор не раскрыл тему структуры проекта. Обычно, все классы можно разделить на тематики. Я сейчас открыл свой последний проект, ему полгода, там оказалось около сотни файлов (я думал, штук 50...), у меня всё разбито по папкам на тематики. В корне только 2 файла, проект.cpp (это то, что студия сгенерила, проект Win32 использую для запуска) и app.cpp. (ну и хедеры, плюс stdafx-и и почему-то resource.h). Всё остальное лежит по папкам: Классы и интерфейсы для окон. 3. Улилиты. 9. Названия чётко показывают, кто с чем работает. Структурные данные. 9. Тоже всё ясно из имён. Работа с настройками. 4. Метаданные. 4 Графика. 3 Классы для MDI, 9 UI, диалоги, 21 База данных, 6 Парсер кода, 1 (умножаем всё на два, h и cpp) Структуру самого приложения это нагляднее не делает, но зато легко позволяет найти нужные вещи, они всё на своих местах. И это мне позволяет легко работать с самой архитектурой проекта. Я это всё к тому написал, что автор не раскрыл тему структуры своего проекта, может у него просто всё в куче... если разложить по папкам, всё становится куда нагляднее. С другой стороны, бывают вещи сложные, как их не раскладывай. "Нейрохирургия мозга для чайников" не бывает. Некоторые вещи просто надо мочь держать в голове. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2019, 05:47 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
CEMb, +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2019, 07:24 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
CEMb, +1 умножать на два не надо. имхо - подсчитываются сущности-классы... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2019, 09:45 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
kolobok0умножать на два не надо. имхо - подсчитываются сущности-классы...ну там автор про файлы говорил, поэтому я написал в файлах. Но вообще да, по нормальному, число файлов должно соответствовать числу классов * 2. Но вот у меня не так, у меня в одном заголовке может быть 1-2 класса, потому что иногда лень выносить в отдельный файл, поэтому у меня в проекте число файлов примерно соответствует числу классов (~100 тоже) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2019, 05:18 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Пытаюсь в Eclipse поставить плагин для UML: Papyrus- удачно установился, появилась перспектива, но на диаграммах не меняется черный цвет стрелок, поэтому при цветовой схеме Dark связей практически не видно. UML Designer - установил сборку eclipse-modeling-2019-03 (в которой по логике этот продукт присутствует) и теперь абсолютно не понятно как достучаться до этого инструмента: такой перспективы нет, проекты такого типа создать нельзя, в справке откровенная хрень как добавлять элементы в список, а не на диаграмму, интернет молчит. Visual Paradigm- на сайте есть только exe- дистрибутивы для Windows (что мне не подходит). ObjectAid- только визуализирует уже написанный Java- код, при этом не позволяет заниматься предварительным моделированием. PlantUML- установил их плагин с помощью инфы с их сайта ( http://plantuml.com/ru/eclipse), но как пользоваться этим шедевром- абсолютно не понятно (нет ни новой перспективы, ни нового шаблона проекта). Кто- нибудь пробовал работать с UML в Eclipse? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2019, 10:20 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Немного соврал про UML Designer: появилась перспектива Sirius (чтоб никто не догадался!) и типы проектов Modeling Project и Ecore Modeling Project , при создании которых я не вижу области для построения диаграмм и соотвествующей панели инструментов (для наполнения диаграммы). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2019, 10:31 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Попробовал разные способы установки UML Designer с их сайта и всегда получаю ошибку (Sirius 6.1.2 из Marketplace успешно установлен): авторCannot complete the install because one or more required items could not be found. Software being installed: UML Designer 9.0.0.201901300933 (org.obeonetwork.dsl.uml2.runtime.feature.feature.group 9.0.0.201901300933) Missing requirement: UML Designer 9 Пробовал варианты: 1. Kubuntu 19/04 и OpenSuse 2. Три версии 9.0, 8.1 и 8.0 3. Разные сборки Eclipse: Eclipse IDE for Enterprise Java Developers и Eclipse Modeling Tools Постоянно при установке вываливается эта ошибка. Короче, какая- то хрень с этим UML Designer. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2019, 12:11 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
В борьбе за UML Designer решил, что у меня Java плохая :) Снес текущую Java и натянул Oracle Java. Ошибка продолжает появляться. Думаю с UML Designer надо попрощаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2019, 15:07 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, плюнь ты на этот Eclipse, в нём постоянно что-то отваливается KDevelop рекомендую ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2019, 15:45 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKНаписал проект, в котором порядка 100 файлов с различными взаимосвязанными классами. Как упростить восприятие проекта? Это мелкий проект. У нас был 40 Gb исходников, а были файлы по мегобайту размером и функции свыше 10К строк. Да, даже опытный разработчик входил в курс даже части проекта за 3-6 месяцев. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2019, 22:19 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKВ борьбе за UML Designer решил, что у меня Java плохая :) Снес текущую Java и натянул Oracle Java. Ошибка продолжает появляться. Думаю с UML Designer надо попрощаться. Поражают твои злоключения. И что значит снёс. Поставил. Поставь две. Сконфигурируй так чтобы каждое приложение видело свой JRE. Тыж программист едрить тебя налево....! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2019, 22:27 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
LepsikУ нас был 40 Gb исходников, а были файлы по мегобайту размером и функции свыше 10К строк.Если не секрет, что это было? Просто интересно, получается, в функции 10К строк уникального, неповторяющегося кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 05:21 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Может кодогенерация? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 08:43 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
maytonМожет кодогенерация? Если кодогенерация - то какой смысл новичкам изучать исходники по три месяца? Тут следует изучать метаданные и механизмы генерации. ... ...и все равно, метод размером в 10 тысяч строк - это за пределами. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 08:58 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
CEMbLepsikУ нас был 40 Gb исходников, а были файлы по мегобайту размером и функции свыше 10К строк.Если не секрет, что это было? Просто интересно, получается, в функции 10К строк уникального, неповторяющегося кода.более интересно сколько это всё собиралось ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 09:22 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
В итоге самым простым и самым удобным оказался пакет Modeling из Qt Creator . Единственный минус- в одной модели может содераться несколько холстов (например, для разных диаграмм), а элементы в дереве не комбинируются по холстам (свалены в общую кучу). Т.е. надо выбрать одно из двух: 1. Под каждую диаграмму создавать свою модель (которая хранится в отдельном файле и потому надо иметь "хоровод" файлов, каждый из которых открывать / закрывать отдельно). 2. В дереве элементов иметь все 100500 элементов общим списком в алфавитном порядке. А ведь вся "петрушка" затевалась, чтобы разделить проект на отдельные независимые подсистемы... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 10:55 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK А ведь вся "петрушка" затевалась, чтобы разделить проект на отдельные независимые подсистемы... Прочитал тему. Тут все вроде видят совсем другую цель. Выше писалось про восприятие. То есть чтобы вы просо поняли проект. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 11:06 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpПрочитал тему. Тут все вроде видят совсем другую цель. Выше писалось про восприятие. То есть чтобы вы просо поняли проект. По- моему восприятие увеличится, если проект разбить на десяток независимых подсистем, в кажой из которых всего по 10 классов (часть из которых просто вспомогательные). ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 12:25 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKPetroNotC SharpПрочитал тему. Тут все вроде видят совсем другую цель. Выше писалось про восприятие. То есть чтобы вы просо поняли проект. По- моему восприятие увеличится, если проект разбить на десяток независимых подсистем, в кажой из которых всего по 10 классов (часть из которых просто вспомогательные). Дак так никто не бъет на куски. Это максимализм. И "восприятие увеличится" не тот термин. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 12:28 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Выяснил, что если в Qt Creator создать проект (я использовал Qt Widgets Application), то файлы диаграмм автоматически добавляются к этому проекту и не надо руками поддерживать их расположение. В этом случае в дереве файлов представлены отдельные диаграммы (что очень удобно!), у каждой из которых я создаю по 1 холсту, и поэтому все элементы в дереве принадлежат этому холсту (что тоже очень удобно!). ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 12:40 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
ёёёёёmaytonМожет кодогенерация? Если кодогенерация - то какой смысл новичкам изучать исходники по три месяца? Тут следует изучать метаданные и механизмы генерации. ... ...и все равно, метод размером в 10 тысяч строк - это за пределами. Возможно следовало сделать ревизию типа code-coverage и посмотреть где бизнесу код нужен а где нет. Да я сильно сомневаюсь что человеческий мозг вообще в состоянии охватить это. Проблема еще в том что очень крупные проекты каждый день накатывают по десятку пул-реквестов. Вам мало осознать весь код. Надо еще быть familiar по отношению к текущим актуальным задачам и изменениям. Здесь без модуляризации и строгого разделения на команды разработки никак не обойтись. Я так думаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 12:47 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, В этой IDE. в отличии от студии нет в меню - создать папку. Поэтому вам там сложнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 13:15 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
maytonВозможно следовало сделать ревизию типа code-coverage и посмотреть где бизнесу код нужен а где нет. ... Расслабьтесь: это был адский гон :) 40 Gb исходников :) Для этого надо чтобы вся планета Земля трудилась также продуктивно, как Лев Толстой несколько тысячелетий :) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 13:35 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpSeriyK, В этой IDE. в отличии от студии нет в меню - создать папку. Поэтому вам там сложнее. В Qt Creator можно в файловой системе создать папку и система ее отразит в дереве, потом прямо в Qt Creator можно перенести все что нужно в эту папку. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 13:37 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Тут был совет разбить по папкам и даже названия были даны. Отличный совет. Берете и делаете. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 13:37 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Я в курсе что руками можно. Возни больше. Мне тоже раскидывать позднее. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 13:39 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Какой гон? Посмотрите в гитхабе. Там крупные проекты по 100Мб сорцов. Тоесть до 40Гб нам надо просто взять 400 проектов. Это уровень крупного предприятия. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 13:44 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
LepsikSeriyKНаписал проект, в котором порядка 100 файлов с различными взаимосвязанными классами. Как упростить восприятие проекта? Это мелкий проект. У нас был 40 Gb исходников, а были файлы по мегобайту размером и функции свыше 10К строк. Да, даже опытный разработчик входил в курс даже части проекта за 3-6 месяцев. походу это яркий пример незнания ООП дублирование кода можно и на сотни гб растянуть при желании а ф-и по 10к строк это вообще что-то адски неправильное ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 19:35 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
полудухLepsikпропущено... Это мелкий проект. У нас был 40 Gb исходников, а были файлы по мегобайту размером и функции свыше 10К строк. Да, даже опытный разработчик входил в курс даже части проекта за 3-6 месяцев. походу это яркий пример незнания ООП дублирование кода можно и на сотни гб растянуть при желании а ф-и по 10к строк это вообще что-то адски неправильное Это всё комменты ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 19:49 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
полудухпоходу это яркий пример незнания ООП дублирование кода можно и на сотни гб растянуть при желании а ф-и по 10к строк это вообще что-то адски неправильное Ну что вы верите в откровенную ерунду. Функция на 200 листов А4 :) Если исходики 40 ГБ, то собранное ПО будет весить террабайт :) Вы сами хоть раз встречали такие программы в своей жизни? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2019, 08:15 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Функция на 200 Листов А4. Хм... Можно даже в символах примерно прикинуть сколько это. Хм.. Эти Роберты Мартины и Фаулеры щас поперхнулись чашкой кофе. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2019, 10:24 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKполудухпоходу это яркий пример незнания ООП дублирование кода можно и на сотни гб растянуть при желании а ф-и по 10к строк это вообще что-то адски неправильное Ну что вы верите в откровенную ерунду. Функция на 200 листов А4 :) Если исходики 40 ГБ, то собранное ПО будет весить террабайт :) Вы сами хоть раз встречали такие программы в своей жизни? Маргарет Гамильтон и её код для "Аполлона-11" зы: терабайт ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2019, 21:35 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
полудух, )) в Мире все можно найти, если это кому нибудь нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2019, 21:51 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, а ещё в мире очень сложно найти слово "невозможно" я нашёл всего 2 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2019, 23:08 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
полудухМаргарет Гамильтон и её код для "Аполлона-11"Надо внутрь смотреть. (как и во всех случаях) Может, Маргарет не знала про такую штуку, как функции? Не, ну, мало ли, да? Я когда маленький был, я тоже столько кода писал. У меня откуда-то были рулоны туалетной бумаги для принтеров, что способствовало. Потом немного вырос и понял, что не в количестве пирогов счастье. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 07:40 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
да вроде всё ок с ф-ями в NASA я тут уже не раз приводил их 10 правил , как сопровождать миллионы строк кода и не сойти с ума ( оригинал ) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 13:14 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 13:17 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
точнее тогда это был ещё C т.е. никакого ООП в помине не было ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 13:19 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
CEMbполудухМаргарет Гамильтон и её код для "Аполлона-11"Надо внутрь смотреть. (как и во всех случаях) Может, Маргарет не знала про такую штуку, как функции? Не, ну, мало ли, да? Я когда маленький был, я тоже столько кода писал. У меня откуда-то были рулоны туалетной бумаги для принтеров, что способствовало. Потом немного вырос и понял, что не в количестве пирогов счастье. Для ассемблеров это нормально. Вспомните как сорс выглядел. Мнемоника. Операнды. И ENTER. А бумага была для прочтения. Ибо персоналок не было. Машинное время было ограничено. А тут сиди себе. Читай. С чашкой кофе. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 13:39 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
полудухSeriyKпропущено... Ну что вы верите в откровенную ерунду. Функция на 200 листов А4 :) Если исходики 40 ГБ, то собранное ПО будет весить террабайт :) Вы сами хоть раз встречали такие программы в своей жизни? Маргарет Гамильтон и её код для "Аполлона-11" зы: терабайт Если читывать как бабы из мухи раздувают слона, можно предположить, что в этих книжках программа "Hello, world!" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 14:53 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
CEMbLepsikУ нас был 40 Gb исходников, а были файлы по мегобайту размером и функции свыше 10К строк.Если не секрет, что это было? Просто интересно, получается, в функции 10К строк уникального, неповторяющегося кода. Blackberry Server. Это был тело main thread. загрузка конфигурации, тестирования среды, запуски рабочих тредов. Собиралось 4 часа на довольно приличной билд машине в 2011 году. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 16:32 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
[quot полудух]Lepsikпропущено... дублирование кода можно и на сотни гб растянуть при желании а ф-и по 10к строк это вообще что-то адски неправильное Таки да 1 Гиг был кодогенерирован. И это же не один сервис, их масса, кода под MSSQL и Db2, поддержка 4 почтовых систем (MSExchanage, Lotus Domino, Novell, ...). Частично дублировался код для почтовых сервисов. Но кодовую базу совместить было невозможно ввиду специфики этих систем. Конечно там и утилиты и библиотеки и фрэмворки и прочая-прочая. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 16:40 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Интересно, есть ли какая-то метрика типа тысяч-миллионов-строк-на-человека при которой - развитие ПО останавливается - выделяется строгая фаза поддержки и небольших доработок - выделяется вечный неубываемый технический долг который уже невозможно погасить имеющимися ресурсами - теряется экспертиза. Знающие уходят с проекта (по разным причинам). - newcomers не разбираются во всём. Лишь могут охватить какие-то части или модули. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 18:48 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
mayton, Только экспертный метод. Эксперт - человек). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 19:33 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
полудухда вроде всё ок с ф-ями в NASA я тут уже не раз приводил их 10 правил , как сопровождать миллионы строк кода и не сойти с ума ( оригинал ) авторУказатели на функции запрещены. Ну ё. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 20:41 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
полудухя тут уже не раз приводил их 10 правил ,Спасибо, интересный мануал. Обнаружил, что некоторые правила выполняю уже на автомате, такие как проверки параметров-результатов и минимум указателей. Некоторые пункты сложно соблюдать, например отсутствие динамического выделения памяти, когда у тебя много зачитывается всякой конфигурации и прочего. Сюда же попадают ограничения на циклы. Но:полудухкак сопровождать миллионы строк кода и не сойти с умаэто немного перпендикулярно. Точнее, Power of 10 это необходимо, но недостаточно, говоря математически. полудухда и женский C++ полон сюрпризов Что имеется ввиду? Почему-то вспомнилась Алёна С++, но её код я не видел. maytonДля ассемблеров это нормально. Вспомните как сорс выглядел. Мнемоника. Операнды. И ENTER. А бумага была для прочтения. Ибо персоналок не было. Машинное время было ограничено.Ну я был не настолько маленький, я на бейсике писал, а так, да, персоналок и времени на них не было много, поэтому бумага. LepsikЭто был тело main thread. загрузка конфигурации, тестирования среды, запуски рабочих тредов.а в процентном соотношении можно примерно прикинуть, сколько кода на что ушло? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 07:03 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
CEMbполудухя тут уже не раз приводил их 10 правил ,Спасибо, интересный мануал. Обнаружил, что некоторые правила выполняю уже на автомате, такие как проверки параметров-результатов и минимум указателей. Некоторые пункты сложно соблюдать, например отсутствие динамического выделения памяти, когда у тебя много зачитывается всякой конфигурации и прочего. Сюда же попадают ограничения на циклы. Эти требования подходят для аэрокосмоса. Но для обычной бизнес-разработки их соблюсти очень сложно. Например требование - не использовать прямую или косвенную рекурсию . У нас - много рекурсии в поисковых алгоритмах и везде где есть процессинг XML/JSON или каких-то древовидных бизнес-объектах. Требование - Весь код должен компилироваться при всех включенных warning'ах . Возможно это реально соблюсти на С. Но в других языках в счет их естесвтенной бурной эволюции не получать никаких варнингов - это либо сложно либо невыполнимо в силу ситуации. Требование Не использовать динамическое распределение памяти после инициализации. . Я-бы обсудил. Сначала для С. А потом попробовал-бы обобщить. Если получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 10:25 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Вопрос по делу: по Мартину разделил свою программу на концентрические круги. Слой "Шлюзы, контроллеры, представления" отделяет от остальной программы в том числе реализацию внешних интерфейсов. Вопрос: что писать в этом слое для того, чтобы программа взаимодействовала с Qt- интерфейсом? В этом вопросе указанный слой вырождается в "пробрасывание вызовов" (с помощью класса- реализации, интерфейса и фабрики) от внтуреннего слоя "Сценарии" к внешнему слою с фреймворком Qt. Если для доступа к БД в этом слое находится SQL- код, как способ получения данных из любой sql- подобной базы данных, то в вопросе интерфейса этот слой выглядит очень смешно. Может при рассмотрении интерфейса, основанного на Qt, я не вижу какой- то части кода, которую для защиты надо вынести в промежуточный слой? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 10:27 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Все проще. Делить надо сначала по крупному - по функционалу. А потом в каждом куске можно уже по Мартину. Пример 1С: модуль Кадры, модуль ТорговляИСклад и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 11:01 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Для доступа к бд обычно ОРМ или рукописный паттерн репозиторий. А можно и dll DAO. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 11:04 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKВопрос по делу: по Мартину разделил свою программу на концентрические круги. Слой "Шлюзы, контроллеры, представления" отделяет от остальной программы в том числе реализацию внешних интерфейсов. Ссылка интересная. Спасибо. Почитаем. Круги никогда не применял. Но есть сомнения что в любой задаче мы можем выделить например "шлюзы". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 11:09 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpSeriyK, Все проще. Делить надо сначала по крупному - по функционалу. А потом в каждом куске можно уже по Мартину. Пример 1С: модуль Кадры, модуль ТорговляИСклад и т.д. "По крупному" программа уже поделена: я ведь не просто так спрашиваю конкретно об интерфейсе. В этом направлении у меня произошло вырождение одного из слоев (поэтому закралось подозрение, что я что- то в этом направлении не замечаю). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 12:52 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
maytonСсылка интересная. Спасибо. Почитаем. Круги никогда не применял. Но есть сомнения что в любой задаче мы можем выделить например "шлюзы". Эта статья- краткая выжимка книги Роберта Мартина "Чистая архитектура. Искусство разработки программного обеспечения" (2018 год) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 13:06 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, ОК. В Qt есть ГУИ не на виджетах, а на Quick. Во втором случае там Модель и свои законы. У тебя какой вариант? Хотя я Quick не люблю и у меня виджеты. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 13:24 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpSeriyK, ОК. В Qt есть ГУИ не на виджетах, а на Quick. Во втором случае там Модель и свои законы. У тебя какой вариант? Хотя я Quick не люблю и у меня виджеты. У меня простенькие формы (заголовок, три кнопки и текстовое поле для отображения хода работы) на виджетах. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 13:32 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
CEMbполудухда и женский C++ полон сюрпризов Что имеется ввиду? Почему-то вспомнилась Алёна С++, но её код я не видел. то что в программировании крайне важно внимание к мелочам и скрупулёзность усидчивость и терпение (чтобы найти баг, например) а также недюжая мотивация к обучению у женщин же чаще в голове ветер и меньше ответственности "женщина может позволить себе быть ветренной, мужчина - нет" (с) крёстный отец maytonCEMbпропущено... Спасибо, интересный мануал. Обнаружил, что некоторые правила выполняю уже на автомате, такие как проверки параметров-результатов и минимум указателей. Некоторые пункты сложно соблюдать, например отсутствие динамического выделения памяти, когда у тебя много зачитывается всякой конфигурации и прочего. Сюда же попадают ограничения на циклы. Эти требования подходят для аэрокосмоса. Но для обычной бизнес-разработки их соблюсти очень сложно. Например требование - не использовать прямую или косвенную рекурсию . У нас - много рекурсии в поисковых алгоритмах и везде где есть процессинг XML/JSON или каких-то древовидных бизнес-объектах. Требование - Весь код должен компилироваться при всех включенных warning'ах . Возможно это реально соблюсти на С. Но в других языках в счет их естесвтенной бурной эволюции не получать никаких варнингов - это либо сложно либо невыполнимо в силу ситуации. Требование Не использовать динамическое распределение памяти после инициализации. . Я-бы обсудил. Сначала для С. А потом попробовал-бы обобщить. Если получится. ну мне лично больше понравилась книжка про "выстрелить в ногу", там полней и ценней правила ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 13:34 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
и современней ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 13:36 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKPetroNotC SharpSeriyK, ОК. В Qt есть ГУИ не на виджетах, а на Quick. Во втором случае там Модель и свои законы. У тебя какой вариант? Хотя я Quick не люблю и у меня виджеты. У меня простенькие формы (заголовок, три кнопки и текстовое поле для отображения хода работы) на виджетах. На простой можно ничего не делить. Если для обучения, то ... Твой круг Контроллеры вполне перекликается с MVC или MVVP. Тогда файл.ui и его h, cpp это View. ViewModel это класс myFormViewModel. Он отображает состояние ГУИ. Во вью состояния нет. Вот этого класса тебе не хватает. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 13:46 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Опять вопросик: чтобы максимально разделить код по подсистемам решил использовать систему сигналов (а то у меня прямо в GUI- формах создавался новый поток и в нем запускалась обработка, что превращало код в лапшу). В правильном ли направлении я двигаюсь? Если да, то можете посоветовать книгу / статью на тему применения сигналов с точки зрения архитектуры приложения (чтобы не переизобрести велосипед с квадратными колесами)? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 17:29 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Два постулата имхо: - потоки редко нужны, т.к. само ГУИ однопоточно. - как выше сказано, не пишите ничего в VIEW. Там у вас класс как член поля. Вот туда все и передавайте. Зачем сигналами? Можно так myFormViewModel.clickButtonDelete(....) Как угодно можно назвать. Сигналы это события которых нет в плюсах). Так вроде). Имхо. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 18:55 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpSeriyK, Два постулата имхо: - потоки редко нужны, т.к. само ГУИ однопоточно. - как выше сказано, не пишите ничего в VIEW. Там у вас класс как член поля. Вот туда все и передавайте. Зачем сигналами? Можно так myFormViewModel.clickButtonDelete(....) Как угодно можно назвать. Сигналы это события которых нет в плюсах). Так вроде). Имхо. Потоки ОЧЕНЬ нужны, иначе интерфейс будет виснуть до окончания обработки, а сама обработка будет происходить в один поток. myFormViewModel.clickButtonDelete(....) - ужасное решение, которе делает зависимым модуль формы от модуля с потоком. А это две СОВЕРШЕННО РАЗНЫЕ сущности, которые должны жить абсолютно ничего не зная друг о друге. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 18:59 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Ну, если ожидание более 10 сек например, и курсор песоч.часы не устраивают, то можно и потоки. Тогда мне нравится подход MS в шарпе. Метод поточный всегда обозначен await. Можно так Код: plaintext 1.
Тогда управление сразу вернется в ГУИ. Заморозки не будет. Вот тут можно подписаться на событие окончания функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 19:23 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#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 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKв моем случае это подсистема гарантированного выполнения переданной функциивы правильно делаете что ищите Повторяемы код или функционал. Я не пойму что это такое выше вы назвали. На первый взгляд это слишком мелко. Вы бы код показали. - легаси проект или новый? - просто класс выделить подходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 08:35 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKпереводчика" с языка одной подсистемы на язык другой)посмотрите вокруг себя. Все уже изобретено. В веб таким переводчиком является код возврата Http.error. Это просто перечислимое. Но это гетерогенные среды! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 08:53 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKгарантированного выполнения переданной функциикак корабль назовешь, так он и поплывёт))) Юмор люблю. .. Названия подмодулей должен понимать заказчик не программист. Измените название чтобы записать в ТЗ и его понимали. То есть опять таки функционал! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 08:57 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK1. Ниже по стеку должны знать потенциальные варианты действий подсистемы, находящейся выше по стеку (и подготавливали данные исходя из этого, сообщая об ошибке).при http.error это нет. Внизу тупо передают код 404 по факту. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 09:03 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKПроблема в том, что получение из инета может быть с ошибкой и надо как- то из второй подсистемы сообщить первой о необходимости повтора запроса. И тут они становятся зависимыми друг от друга!Я бы сделал так (мы недавно делали похожую систему, правда я потом отошёл от дел, поэтому точность не гарантирую): - 2 очереди, одна с командами, вторая с ответами (у нас даже очередь с командами разбирали несколько исполнителей). - обе очереди - это отдельные подсистемы, с API, которые по вводимым данным формируют у себя объект в своём формате. Т.е. если это ошибка, ты можешь установить через отдельный метод код ошибки, если надо ещё сообщение - через отдельный метод сообщение. И так далее. Тоже самое с командной очередью: свой объект, своё API. - оба API делаются по необходимому минимуму. - ни принимающая, ни обрабатывающая системы друг о друге не знают. Они так же не знают формат объектов в очередях, у них просто есть несколько функций, через которые они могут устанавливать/читать информацию о событии/команде. кейс:SeriyKполучение из инета может быть с ошибкой- вторая система создаёт в очереди сообщений объект сообщения, передаёт в него код и текст. - первая разгребает очередь, получает информацию об ошибке - первая создаёт объект в очереди команд на повторное выполнение запроса. скорее всего, есть какой-нибудь паттерн про это, но я в их названиях плохо разбираюсь ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 10:01 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
CEMbSeriyKПроблема в том, что получение из инета может быть с ошибкой и надо как- то из второй подсистемы сообщить первой о необходимости повтора запроса. И тут они становятся зависимыми друг от друга!Я бы сделал так (мы недавно делали похожую систему, правда я потом отошёл от дел, поэтому точность не гарантирую): - 2 очереди, одна с командами, вторая с ответами (у нас даже очередь с командами разбирали несколько исполнителей). - обе очереди - это отдельные подсистемы, с API, которые по вводимым данным формируют у себя объект в своём формате. Т.е. если это ошибка, ты можешь установить через отдельный метод код ошибки, если надо ещё сообщение - через отдельный метод сообщение. И так далее. Тоже самое с командной очередью: свой объект, своё API. - оба API делаются по необходимому минимуму. - ни принимающая, ни обрабатывающая системы друг о друге не знают. Они так же не знают формат объектов в очередях, у них просто есть несколько функций, через которые они могут устанавливать/читать информацию о событии/команде. кейс:SeriyKполучение из инета может быть с ошибкой- вторая система создаёт в очереди сообщений объект сообщения, передаёт в него код и текст. - первая разгребает очередь, получает информацию об ошибке - первая создаёт объект в очереди команд на повторное выполнение запроса. скорее всего, есть какой-нибудь паттерн про это, но я в их названиях плохо разбираюсь Балин! Да не в средстве доставки ошибки дело! Уже третий раз на этом циклятся! Беда в том, что эти две подсистемы должны ОДИНАКОВО понимать произошедшии ситуации, т.е. теряют взаимную независимость, потому что одна подсистема должна подстраиваться под другую. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 10:12 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
CEMbпаттернОчереди - message orienred middleware ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 10:15 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKтеряют взаимную независимость,девственность всегда теряется. https://ru.m.wikipedia.org/wiki/Контрактное_программирование Контракты это документация к API ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 10:19 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Откуда неприязнь к зависимостям? ИС моделирует реальный мир. А не вымышленный. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 10:22 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpSeriyK, Откуда неприязнь к зависимостям? ИС моделирует реальный мир. А не вымышленный. Тогда надо отказываться от универсального функционала. Ведь если он зависим от чего- то специфичного, то каждый раз эта специфика будет разной. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 10:26 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Универсальность враг хорошего. Заказчик требует УНИКАЛЬНУЮ программу. А менеджеры придумывают универсальность от лени и от прибыли. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 10:40 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Ну и молирование прелметки это УПРОЩЕНИЕ модели мира в некоторой степени. Она не один к олному. А насколько упростить это искусство архитектора. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 10:42 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpмолированиемоДелирование. Блин, этот тачпад)) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 10:44 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpSeriyK, Универсальность враг хорошего. Заказчик требует УНИКАЛЬНУЮ программу. А менеджеры придумывают универсальность от лени и от прибыли. Уникальность и универсальность - антагонизмы? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 10:57 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
mayton, И да и нет. От контекста зависит. Универсальная абстрактно не бывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 11:08 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
mayton, В тз по гост не случайно главные это функциональные требования. Там есть универсальность? Обычно нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 11:10 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKПовторюсь, что могу без лишних объектов (таких как очередь) бросить исключение, и оно само поднимется выше по стеку и передаст информацию о произошедшем. Вопрос в том, чтобы выше по стеку поняли как себя вести в этой ситуации. Возможно одно из двух: 1. Ниже по стеку должны знать потенциальные варианты действий подсистемы, находящейся выше по стеку (и подготавливали данные исходя из этого, сообщая об ошибке). 2. Выше по стеку умели интерпретировать результаты того, что происходит ниже."Смешались в кучу кони, люди ..." Не нужно ничего такого : исключения для того и придуманы, чтобы много не думать. В нормальной ситуации, необходимая информация об ошибке содержится в типе исключения. В редких случаях можно "завернуть" в исключение "что-нибудь дополнительное". ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 12:12 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKБеда в том, что эти две подсистемы должны ОДИНАКОВО понимать произошедшии ситуации Не должны. Если подсистемы выполняют разные функции, то ситуации у них совершенно разные. Одна и та же ситуация не может произойти в разных подсистемах, соответственно и одинаковое "понимание" её не требуется. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 12:44 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov"Смешались в кучу кони, люди ..." Не нужно ничего такого : исключения для того и придуманы, чтобы много не думать. В нормальной ситуации, необходимая информация об ошибке содержится в типе исключения. В редких случаях можно "завернуть" в исключение "что-нибудь дополнительное". А типы исключений из воздуха появятся? У меня сейчас именно такая зависимость и присутствует: в одном модуле объявлены типы исключения, а второй модуль их порождает. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 13:12 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Преобразовывай при передаче в "OLE совместимые типы". Или ещё во что то. Главное что тебе как прогеру будет неудобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 13:27 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Пока я прихожу к такому решению: разделить задачу на: 1) универсальный неизменяемый функционал 2) все остальное В этом случае п.1 можно положить в свою библиотеку функций (где лежат универсальные функции типа комбинация нескольких массивов в один) и не боясь устанавливать зависимость от этого неизменяемого функционала где только нужно. Иначе надо бояться в том числе изменения функций языка и с ними тоже работать через интерфесы (чтобы защититься от их изменения :) ) В представленном выше конкретном случае подсистему с бесконечным циклом надо лишить громкого звания подсистемы (забрав у нее интерфейс) и положить в общедоступные объекты, в ней определить необходимые для взаимодействия исключения и спокойно ее с этими исключениями использовать где нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 13:29 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpSeriyK, Преобразовывай при передаче в "OLE совместимые типы". Или ещё во что то. Главное что тебе как прогеру будет неудобно. Шестая страница обсуждения, а вы так и не поняли, что зависимость появляется из- за необходимости ДОГОВОРИТЬСЯ и ОДИНАКОВО понимать происходящие ситуации. Хоть в 10 слоев заворачивайся обертками- все равно в конечном итоге встанет вопрос как с языка событий одной подсистемы перевести на язык действий другой подсистемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 13:33 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKШестая страница обсуждения, а вы так и не поняли,а есть тут кто нибудь кто тебя понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 13:40 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKкак с языка событий одной подсистемы перевести на язык действий другой подсистемы.про SOAP слышал? Какие мнения? Ну или про COM? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 13:41 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKвсе равно в конечном итоге встанет вопрос как с языка событий одной подсистемы перевести на язык действий другой подсистемы. Если программист неспособен внятно описать API каждой из подсистем - да, всегда будет вопрос костылей и прокладок. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 13:43 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpSeriyKкак с языка событий одной подсистемы перевести на язык действий другой подсистемы.про SOAP слышал? Какие мнения? Ну или про COM? Дедушка COM... Зачем он тут? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 13:43 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKВ этом случае п.1 можно положить в свою библиотеку функцийда. dll с библиотечными функциями SeriyKВ представленном выше конкретном случае подсистему с бесконечным циклом надо лишить громкого звания подсистемы (забрав у нее интерфейс) и положить в общедоступные объекты, в ней определить необходимые для взаимодействия исключения и спокойно ее с этими исключениями использовать где нужно.да ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 13:44 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
maytonДедушка COM... Зачем он тут?у MS была цель как у ТС чтобы куски писали на разных ЯП)). Но не получилось) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 13:45 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpSeriyK, Термин "черный ящик" учили? У него есть вход и выход. У вас 2 ящика. Как считаете, они зависимы?)) Во вход втекает Н литров, в выход вытекает М литров. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 13:49 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Ролг ХупинPetroNotC SharpSeriyK, Термин "черный ящик" учили? У него есть вход и выход. У вас 2 ящика. Как считаете, они зависимы?)) Во вход втекает Н литров, в выход вытекает М литров.и...? Мысль то формулируй) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 13:59 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC SharpmaytonДедушка COM... Зачем он тут?у MS была цель как у ТС чтобы куски писали на разных ЯП)). Но не получилось) Просто начали с SOAP. И логично было добавить бабушку CORBA, и брата дедушки DCOM. Мне кажется последний родственник был заточен на межсетевую интеграцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 14:08 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
mayton, DCOM межсетевой COM. А corba тогда в дельфи не котировался когда я там писал. В других ЯП не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 14:10 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
mayton, вообще, IT ходит зигзагами) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 14:12 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Спиралью скорее. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 15:17 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 15:33 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Спираль мебиуса ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 15:34 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKБалин! Да не в средстве доставки ошибки дело! Уже третий раз на этом циклятся! Беда в том, что эти две подсистемы должны ОДИНАКОВО понимать произошедшии ситуации, т.е. теряют взаимную независимость, потому что одна подсистема должна подстраиваться под другую. Вот по этому предложению не совсем понятно. "должны ОДИНАКОВО ... т.е. теряют взаимную независимость..." Так "должны" плохо или "теряют" плохо? Я тебе нарисовал систему, где твои две подсистемы независимы. Очереди предоставляют довольно универсальное API. Твои подсистемы друг о друге ничего не знают. SeriyKШестая страница обсуждения, а вы так и не поняли, что зависимость появляется из- за необходимости ДОГОВОРИТЬСЯ и ОДИНАКОВО понимать происходящие ситуации. Хоть в 10 слоев заворачивайся обертками- все равно в конечном итоге встанет вопрос как с языка событий одной подсистемы перевести на язык действий другой подсистемы.Ты хочешь какой-то сферический конь в вакууме. Когда у тебя есть конкретные данные - у тебя будет зависимость, на чём бы ты ни писал. Не хочешь конкретные данные - напиши интерфейс, который на всё будет передавать/возвращать какой-нибудь _variant_t или boost::any и дальше каждая система будет решать, что с ним делать. Зато капец как независимо. Хочется лёгкого перевода на другие языки? Пиши на чистых сях, они достаточно хорошо близки ко всему. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 06:35 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
Предлагаю так же посмотреть на проблему шире: а так ли нужна независимость? К примеру, если надо от одной системе что-то передать другой, есть два варианта: - системы просто договариваются о протоколе - системы независимо валят всё в чёрный ящик и читают оттуда. плюсы второго подхода мы знаем минусы: - надо городить чёрный ящик - надо писать код, который разбирает данные из чёрного ящика - надо писать код, который формирует данные из чёрного ящика. К примеру, у вас есть структура для состояния, вам придётся отдельно закидывать в ящик её составляющие. Потому что независимость. плюсы первого подхода: - вы просто скидываете и пишите/читаете пласт данных в/из потока. неужели всё у вас в проекте так часто меняется, что приходится напрягаться в независимость? :) я тут с одним ява-программистом дискутировал на тему переопределения операторов, что это удобно, на что он мне сказал: ну вот придёт в проект новичок, ему надо будет показывать, что где переопределено. Я считаю, это большая проблема, выше уровнем, чем архитектурная: если в проект постоянно приходят новички ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 07:01 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
CEMbнеужели всё у вас в проекте так часто меняется, что приходится напрягаться в независимость? :)думаю он просто ищет крайние условия безотностительно проекта. Как тянут руку в огонь и понимают по факту - это горячо. Или как прогер каждый день думает - новую функцию? / перегрузку функции? /позвонить соисполнителю чтоб поправил входной char на int). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 07:30 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
CEMb- системы просто договариваются о протоколе - системы независимо валят всё в чёрный ящик и читают оттуда.первый прдход часто видел когда заказчик и соисполнитель близко и постоянно доступен. Рефакторинг делать легко. Второй вариант когда между нашими и ихними в кавычках пропасть согласований, корректировки ЧТЗ и командировки. То есть, я то свои системы стараюсь делать ЗАВИСИМЫМИ. Вот в чем дело, автор). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 07:41 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
CEMbсистемы независимы. Очереди предоставляют довольно универсальное API. Твои подсистемы друг о друге ничего не знают. Нет, будут знать! SeriyKВопрос не в способе доставки, а во взаимо- понимании (договоренности) двух подсистем. Повторюсь, что могу без лишних объектов (таких как очередь) бросить исключение, и оно само поднимется выше по стеку и передаст информацию о произошедшем. Вопрос в том, чтобы выше по стеку поняли как себя вести в этой ситуации. Возможно одно из двух: 1. Ниже по стеку должны знать потенциальные варианты действий подсистемы, находящейся выше по стеку (и подготавливали данные исходя из этого, сообщая об ошибке). 2. Выше по стеку умели интерпретировать результаты того, что происходит ниже. Введение промежуточного объекта ("переводчика" с языка одной подсистемы на язык другой) не изменит ситуацию, поскольку зависимость будет существовать через него. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 07:38 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyKНет, будут знать!это замечательно. Разве это плохо? Разве контроль типов это плохо? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 08:58 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
PetroNotC Sharpэто замечательно. Разве это плохо? Разве контроль типов это плохо? Да, это плохо: если мне потребуется вытащить из проекта небольшой функционал, то его подсистема "потянет" соседнюю, а та в свою очередь следующую и так надо будет перенести весь проект (из- за мелочи!). И дело не только в возможности копирования наработок, дело и в том, что непосредственно во время программирования надо в голове держать всю систему целиком (ведь она вся связана!), что усложняет разработку систем (уже при размере в 100 файлов все эти зависимости приводят к тому, что большинство времени уходит на "прыжки" по файлам и потуге удержать весь этот ансамбль в голове). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 09:15 |
|
Как сделать проект более структурно понятным?
|
|||
---|---|---|---|
#18+
SeriyK, Ты как будто не читал что выше писали. Если надо вытащить, то можно вытащить ФУНКЦИОНАЛЬНЫЕ куски. Сердце нельзя вытащить, а ногу отрезать можно. Ферштейн? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 09:35 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017607]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
269ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 366ms |
0 / 0 |