Как правильно разбивать программу на модули в C++?

83
25 февраля 2022, 17:50

К примеру у меня есть проект на Qt, есть main.cpp, mainform.h mainform.cpp. В mainform.cpp я объявляю какие либо методы по нажатию кнопок и тд. Как правильно разбивать программу на модули?(h и cpp). Если у меня есть функции сохранения/загрузки файлов, то мне нужно их вынести в отдельный header/cpp под названием FileManagment? Сам уже запутался, заранее благодарю!

Answer 1

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

Answer 2

Вы говорите о косметическом оформлении. В этом плане если функции/классы не будут использоваться многократно, не важно где и как все будет содержаться - можете ничего не разбивать, а можете хоть для каждой функции отдельный файл сделать. Однако если к примеру ваши функции чтения/записи занимают длительное время, желательно вынести их в отдельный поток чтобы не замораживать на время обработки основной eventloop (интерфейс будт "висеть" пока работает какая-то функция). Как вынести в отдельный поток - читайте про QThread. Например тут https://habr.com/ru/post/150274/

READ ALSO
static в глобальной области видимости

static в глобальной области видимости

Если я объявляю static-функцию в глобальной области видимости, то она доступна только в этом файле, и её extern уже не получитьЕсли static-переменная...

61
MySql после установки на Centos 7 не запускается

MySql после установки на Centos 7 не запускается

Устанавливаю MySql на Centos7 следующим образомСначала скачиваю

101
индексы в mysql

индексы в mysql

как известно, если в таблицу добавляется запись, то пересчитываются индексы и сбрасывается кэш запросов, чем больше таблица - тем больше времени...

107
Ошибка при выводе шифрования столбца таблицы при помощи AES шифрования и кодировке BASE 64 от имени пользователя

Ошибка при выводе шифрования столбца таблицы при помощи AES шифрования и кодировке BASE 64 от имени пользователя

При работе с таблицей от имени пользователя шифрую и кодирую записи таблицы, при этом все хорошо выводит

98