Когда можно использовать несколько исходных файлов с одним заголовком

Один заголовок для нескольких cpp-файлов

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

Я работал над сервером и клиентом в течение долгого времени, и то, что первоначально должно было быть всеобъемлющим классом «CommandManager», стало ужасным монстром. Он был разработан для перехвата сообщений, полученных, возможно, от сотен клиентов, их анализа, выяснения, что это за команда, и отправки ее требуемой функции в нужном классе.

Это делается путем фильтрации сообщения после декодирования заголовка, а затем путем сопоставления полученной команды «обычный текст» с std :: map, предварительно загруженной со всеми командами.

Это означает, что для каждой команды, которую я реализую, мне нужна соответствующая функция-член. Первоначально это работало нормально … но сейчас у меня более 100 команд, и я даже не близок к выполнению. Я достигаю 4000 строк кода в файле .cpp, и у меня начинаются проблемы с отслеживанием всего этого. Несмотря на наличие достойных стандартов именования, он становится универсальным для большого количества кода, который я бы предпочел распространить.

Я все еще считаю себя большим новичком в программировании вообще и C ++.

Кто-нибудь еще сталкивался с этими проблемами в прошлом при разработке большого проекта, и что они сделали, чтобы решить эти проблемы?

4

Решение

(…) то, что изначально должно было быть всеобъемлющим
Класс «CommandManager» стал ужасным монстром.

Это часто случается с так называемыми классами «менеджера». Исходя из опыта, я бы сказал, что само слово «менеджер» обычно говорит о том, что вы не уверены в том, какова точная цель класса, и в конечном итоге позволяет классу эволюционировать в то, что вы здесь описываете.

Первоначально это работало нормально, но теперь у меня более 100 команд,
и я даже не близок к завершению. Я достигаю 4000 строк кода в
файл .cpp, и у меня начинаются проблемы с его отслеживанием
все.

Звучит довольно плохо.

Кто-нибудь еще сталкивался с этими проблемами в прошлом при разработке большого проекта,

Да, все. Это очень распространенная проблема. И хотя все сталкивались с этой проблемой раньше, печальная правда в том, что большинство разработчиков не признают ее проблемой. Это означает, что вы больше не «большой новичок в программировании», но уже сделали важный шаг вперед.

и что они сделали, чтобы исправить эти проблемы?

Редизайн программы, разделение большого класса на более мелкие с более специализированной функциональностью.

Тот факт, что вся сложность теперь находится в одном файле, является симптомом настоящей проблемы, и эта настоящая проблема заключается в существовании монолитного класса. Технически, C ++ местами нет ограничений о том, сколько определений функций должно быть в одной единице перевода (читай: «в один файл * .cpp»). Но я думаю, что в вашем случае разделение реализации на несколько файлов на самом деле ничего не решает, а только увеличит сложность. YMMV.

Обратите внимание, что стандарт C ++ имеет приложение о количествах реализации, но оно информативное. Это Приложение B, и оно говорит:

Поскольку компьютеры конечны, реализации C ++ неизбежно
ограничены в размерах программ, которые они могут успешно обрабатывать.

(…)

Число в скобках после каждого количества рекомендуется в качестве
минимум для этого количества. Однако эти количества только
руководящие принципы и не определяют соответствие.

Одно интересное руководство для вас будет:

Члены объявлены в одном классе [4 096].

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

2

Другие решения

Основная причина, по которой код реализации отклоняется от нескольких .cpp Файлы частично сгенерированный код из инструментов.

В этом нет ничего плохого в принципе.

1

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

Я бы предложил разделить функции-члены по их функциональности. Например, имейте один файл, который имеет связанные с сетью члены, один файл, который обрабатывает синтаксический анализ, один, который обрабатывает обработку, и т. Д. Если у вас есть какие-либо частные члены, которые используются только одним или двумя другими членами, поместите их вместе.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector