私がここ数年取り組んでいる大きなプロジェクトは、ファームウェアの心臓部である高度なデバイスの制御(およびすべて)アプリケーションです。
デバイスは非常に高度であり、メモリから言うことができるよりも多くの異なる機能を備えており、それらの98%はこの1つの巨大な実行可能ファイルによって処理されます。一方では、プログラムは非常に保守性が高く、内部で適切にモジュール化され、適切に文書化されており、ディレクトリやファイルなどによって機能が合理的に分離されています。
しかし、最終的には、リモートデータベース通信、タッチスクリーン処理、多数のさまざまな通信プロトコル、測定、いくつかの制御アルゴリズム、ビデオキャプチャ、イースターの日の出時刻と日付(真剣に、非常に深刻な目的のために必要です!)...一般に、非常に薄く関連しているもの、多くの場合、いくつかの遠いモジュール間で少しずつ流れるいくつかのデータを通してのみ関連するもの。
ソケットを介して、より具体的な目的で、必要に応じてロード/アンロードするなど、互いに通信する複数の個別の実行可能ファイルとして実行できます。この方法で作成された理由は特にありません。
片手で機能し、大丈夫です。プロジェクトは、複数のバイナリのビルドを維持することなく、よりシンプルです。内部構造も簡単です。ソケットや共有メモリを介して通信するのではなく、メソッドを呼び出すか、変数を読み取るだけです。
しかし、一方で、このことの大きさ、規模は私をゾッとさせるだけで、タイタニックを操縦しているように感じます。私は常にモジュール化することを教えられましたが、すべてを1つの巨大なファイルにまとめるのは間違っているように感じます。私が知っている問題の1つは、1つの(わずかな)モジュールがすべてクラッシュするという重大なクラッシュです。それ以外の場合、内部の分離と防御的なプログラミングにより、何らかの理由で内部モジュールの半分が正常に機能しなくなった場合でも、これがほとんど正しく実行されることが保証されます。
他にどんな危険を見落としましたか?なぜこれが私を怖がらせるのですか?これは単なる不合理な未知への恐怖ですか?このように深刻な大きなプロジェクトを作成することは、受け入れられている慣行ですか?不安を和らげるか、バージョン2.0を複数の小さなバイナリにリファクタリングする正当な理由を教えてください。