Большой проект, над которым я работаю уже пару лет, - это приложение для управления (и все остальное) продвинутого устройства, сердце его прошивки.
Устройство довольно продвинутое, с более разнообразными функциями, чем я мог бы сказать из памяти, и 98% из них обрабатываются этим огромным исполняемым файлом. С одной стороны, программа довольно удобна в обслуживании, хорошо модульна внутри, должным образом документирована, есть разумное разделение функций по каталогам и файлам и так далее.
Но, в конце концов, все это объединено в одно приложение, которое выполняет все функции: от связи с удаленной базой данных, обработки сенсорного экрана, обработки десятка различных протоколов связи, измерений, нескольких алгоритмов управления, захвата видео, времени восхода и даты Пасхи (серьезно, и они нужен для очень серьезных целей!) ... В общем, вещи, которые очень тесно связаны, часто связаны только с некоторыми данными, которые просачиваются между некоторыми дальними модулями.
Это может быть сделано как несколько отдельных исполняемых файлов, взаимодействующих друг с другом, скажем, через сокеты, с более конкретной целью, может быть загружено / выгружено при необходимости и так далее. Нет конкретной причины, почему это сделано таким образом.
С одной стороны, это работает, и это работает хорошо. Проект более простой, без ведения сборки из нескольких двоичных файлов. Внутренняя структура также проще, когда вы можете просто вызвать метод или прочитать переменную вместо того, чтобы разговаривать по сокетам или совместно используемой памяти.
Но с другой стороны, размер, масштаб этой штуки меня просто пугают, это похоже на пилотирование Титаника. Меня всегда учили модульности, и объединение всего в один гигантский файл кажется неправильным. Одна проблема, которую я знаю, это серьезный сбой одного (даже незначительного) модуля, который дает сбой всем, но качество кода гарантирует, что этого не произойдет в выпусках. Иначе, внутреннее разделение и защитное программирование гарантируют, что это все еще будет работать в основном правильно, даже если половина внутренних модулей по какой-либо причине обычно выходит из строя.
Какие еще опасности я упустил из виду? Почему это меня пугает? Это просто иррациональный страх неизвестного? Является ли создание серьезных крупных проектов таким способом принятой практикой? Либо успокойте мои страхи, либо дайте мне вескую причину для реорганизации версии 2.0 в несколько меньших двоичных файлов.