Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как сделать проект более структурно понятным? / 25 сообщений из 170, страница 1 из 7
24.05.2019, 11:55
    #39817657
SeriyK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
Написал проект, в котором порядка 100 файлов с различными взаимосвязанными классами. Да, все логично разложено в разные классы без повторов кода и с разделением ответственности. Это привело к тому, что классов и взимосвязей между ними стало много и беглый взгляд на всё это не позволяет уловить основные заложенные идеи. Человеку с улицы разобраться с этим клубком переплетенных ссылок в сотне файлов очень сложно.

Как упростить восприятие проекта?
...
Рейтинг: 0 / 0
24.05.2019, 11:57
    #39817661
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
SeriyK,

Бить на модули и библиотеки
...
Рейтинг: 0 / 0
24.05.2019, 12:04
    #39817666
SeriyK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
Petro123SeriyK,

Бить на модули и библиотеки

Все уже разбито, но сильно проще не становится.
...
Рейтинг: 0 / 0
24.05.2019, 12:08
    #39817668
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
SeriyK,
Это общие слова. Надо конкретику.
...
Рейтинг: 0 / 0
24.05.2019, 12:11
    #39817672
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
SeriyKКак упростить восприятие проекта?
Попробуй нарисовать UML-диаграмму классов от руки или с графическими средствами.

В самом начале рисования у тебя уже скорее всего будут мысли по улучшению.

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

Методов в базовых интерфейсах должно быть немного. В идеале - 1. (ISP)
И глубина наследования должна быть не сильно большой. Кода в классах
должно быть не сильно много (Single resp.)

Вобщем хороший поинт также будет - показать эти диаграмму и код коллегам.
...
Рейтинг: 0 / 0
24.05.2019, 12:34
    #39817692
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
SeriyKКак упростить восприятие проекта?открыть для себя doxygen :)
...
Рейтинг: 0 / 0
24.05.2019, 12:38
    #39817695
SeriyK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
egorychSeriyKКак упростить восприятие проекта?открыть для себя doxygen :)

Вы думаете, что текст документации удобно представляет взаимосвязи объектов?
...
Рейтинг: 0 / 0
24.05.2019, 12:41
    #39817701
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
SeriyKКак упростить восприятие проекта?

Вспомнить основы ОО (инкапсуляция) и избавиться от "взаимосвязей". Есть класс, исполняющий
нужную функцию и есть его использование в нужных местах. Всё. А если у вас классы
переплетаются как черви, то что-то уже неладно в консерватории. Пишите комментарии. Много
комментариев.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.05.2019, 12:49
    #39817709
SeriyK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
Dimitry SibiryakovSeriyKКак упростить восприятие проекта?

Вспомнить основы ОО (инкапсуляция) и избавиться от "взаимосвязей". Есть класс, исполняющий
нужную функцию и есть его использование в нужных местах. Всё. А если у вас классы
переплетаются как черви, то что-то уже неладно в консерватории. Пишите комментарии. Много
комментариев.


ООП не забывалось, но при сотне файлов даже с минимальным набором связей получается достаточно сложная структура.
...
Рейтинг: 0 / 0
24.05.2019, 12:49
    #39817710
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
Главный конструктор обычно в голове все держит)).
...
Рейтинг: 0 / 0
24.05.2019, 12:54
    #39817719
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
SeriyKDimitry Sibiryakovпропущено...

Вспомнить основы ОО (инкапсуляция) и избавиться от "взаимосвязей". Есть класс, исполняющий
нужную функцию и есть его использование в нужных местах. Всё. А если у вас классы
переплетаются как черви, то что-то уже неладно в консерватории. Пишите комментарии. Много
комментариев.


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

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

Если где-то надо закопать банку червей - заставляете высокоуровневый класс реализовать
низкоуровневый интерфейс (благо множественное наследование это позволяет). В этом случае
для нижележащих такой класс остаётся низкоуровневым.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24.05.2019, 13:47
    #39817758
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
SeriyK,
Вместе класс mainWindow и getValueINI никогда не смотрят.
Удачи!
...
Рейтинг: 0 / 0
24.05.2019, 14:10
    #39817777
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
SeriyKВы думаете, что текст документации удобно представляет взаимосвязи объектов?уверен в этом) сам пользуюсь много лет и всем советую.
doxygen и UML рисует по коду и ссылки на использование функций другими методами строит. И стимулирует комментарии писать. И даже их читать иногда)

P.S. 100 классов в проекте - это фигня
...
Рейтинг: 0 / 0
24.05.2019, 15:58
    #39817857
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
Я иногда рисовал yed-ом диаграммы классов. 99% вручную. Делал это задумчиво и обычно сочетая
разбор какого-то нового неизвестого мне кода (кажется это был поисковый движок для сети аптек)

Пример для Apache Lucene приататчил.

Не имею ничего против авто-генераторов диаграмм. Но есть определённый смысл в проделывании
дизайнерской работы. Например физическая компоновка сущностей рядом может говорить о их
родстве (в одном пакете) или о функционале. Среды разработки обычно это не делают
и кидают диаграммы как бог даст.
...
Рейтинг: 0 / 0
24.05.2019, 16:46
    #39817908
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
SeriyKКак упростить восприятие проекта?
прочитать лучшую книгу по ООП
...
Рейтинг: 0 / 0
24.05.2019, 18:04
    #39817950
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
SeriyKпорядка 100 файлов...

если следовать альма-матер учению по ОО от ГрадиБуча, то технология превращения из мысли в код строится на конкретики. Т.е. например бизнес логика должна иметь приблизительно то кол-во сущностей, которым пользуются в жизни люди из жизни в бизнесе. Я например встречал по жизни ну максимум 20-30 сущностей из бизнеса (человек существо конечное)...если добавить различные языковые технологии, области, реализацию и т.п. - то 100-150 классов это очень навёрнутая система должна быть. Либо изначально плохо проведённая декомпозиция задачи.

(круглый)
ЗЫ
Чисто как пример - в исторически сложённом коде было около 1500 сущностей. После проработки бизнес логики - было выявлено около 10-15 классов покрывающих всю бизнес логику. Добавить сюда бд, мультисреадинг, всякие логи-обработки, самописные юаи, сеть, аутпроксерваки и т.п. огород - итого около 100-150....
как то так.
...
Рейтинг: 0 / 0
25.05.2019, 14:27
    #39818181
SeriyK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
Сейчас выбрал такой путь: разделение проекта на пакеты, которые работают друг с другом только через интерфейсы. Ну и все классы можно разбросать по отдельным пакетам и рассматривать каждый пакет в отдельности (что должно сильно упростить паутину взаимодействия в проекте).

Если видите от чего меня надо предостеречь или куда направить, то буду только рад!
...
Рейтинг: 0 / 0
25.05.2019, 15:11
    #39818190
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
SeriyKЕсли видите от чего меня надо предостеречь или куда направить, то буду только рад!внимательнее читать форум).
Это решение предлагалось в первом вам ответе топика.
...
Рейтинг: 0 / 0
25.05.2019, 15:52
    #39818207
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
У меня есть старый, постоянно дополняемый проект, больше 10 лет.
Ядро менялось мало, добавлялись новые фичи: система отчётов, система плагинов, система экспорта-импорта...
Физически модули одной системы размещаются в отдельных каталогах файловой системы, при разработке строится отдельное тестовое приложение, при этом слежу за тем, чтобы другие подсистемы не использовались. А если все же что-то из дугих подсистем используется - выношу это "что-то" в ядро. Для важных объектов, используемых за пределами подсистемы, делаются отдельные описания интерфейсов.
...
Рейтинг: 0 / 0
25.05.2019, 16:09
    #39818211
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
SeriyKСейчас выбрал такой путь: разделение проекта на пакеты, которые работают друг с другом только через интерфейсы. Ну и все классы можно разбросать по отдельным пакетам и рассматривать каждый пакет в отдельности (что должно сильно упростить паутину взаимодействия в проекте).

Если видите от чего меня надо предостеречь или куда направить, то буду только рад!
откройте для себя HMVC
на примере телефонов: это один для всех отдельный MVC
аля микросервис
и не надо каждому (клиенты/магазины/банки/итд) свой MVC с телефонами пилить
...
Рейтинг: 0 / 0
25.05.2019, 21:26
    #39818263
bk0010
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
SeriyKСейчас выбрал такой путь: разделение проекта на пакеты, которые работают друг с другом только через интерфейсы. Ну и все классы можно разбросать по отдельным пакетам и рассматривать каждый пакет в отдельности (что должно сильно упростить паутину взаимодействия в проекте).

Если видите от чего меня надо предостеречь или куда направить, то буду только рад!Есть такая штука, как шаблоны проектирования , сейчас очень популярная. Часть из них (шаблон делегирования или мост, например) как раз подходят для решения ваших задач. Попробуйте ознакомится и применить. Дополнительный плюс шаблонов в том, что человек, знакомый с шаблонами, быстрее въезжает в проект, построенный на шаблонах.
...
Рейтинг: 0 / 0
27.05.2019, 10:45
    #39818641
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
Интерфейсы... интерфейсы... почему никто не предложил шаблоны? Там связей вообще нет, и всё статически связано и известно на момент компиляции
...
Рейтинг: 0 / 0
27.05.2019, 11:04
    #39818647
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
CEMbИнтерфейсы... интерфейсы... почему никто не предложил шаблоны? Там связей вообще нет, и всё статически связано и известно на момент компиляции
разве так бывает? Вызовы без связей?
...
Рейтинг: 0 / 0
27.05.2019, 11:06
    #39818650
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать проект более структурно понятным?
Шаблон еще более высокоуровневый чем интерфейс. У него даже названия базовых классов и методов - не регламентированы.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как сделать проект более структурно понятным? / 25 сообщений из 170, страница 1 из 7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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