Das große Projekt, an dem ich seit ein paar Jahren arbeite, ist die Steuerung (und alles) eines fortschrittlichen Geräts, das Herzstück seiner Firmware.
Das Gerät ist ziemlich fortschrittlich, mit mehr Funktionen, als ich aus dem Speicher ableiten könnte, und 98% von ihnen werden von dieser riesigen ausführbaren Datei verwaltet. Auf der einen Seite ist das Programm gut wartbar, im Inneren gut modularisiert, ordnungsgemäß dokumentiert, es gibt eine sinnvolle Trennung der Funktionen nach Verzeichnissen und Dateien und so weiter.
Aber am Ende wird alles zu einer Anwendung zusammengefasst, die alles erledigt, von der entfernten Datenbankkommunikation über die Bedienung des Touchscreens bis hin zur Verwaltung eines Dutzend verschiedener Kommunikationsprotokolle, Messungen, verschiedener Steuerungsalgorithmen, Videoerfassung, Sonnenaufgangszeit und Datum von Ostern (im Ernst, und das sind sie auch) benötigt für sehr ernste Zwecke!) ... Im Allgemeinen Dinge, die sehr eng miteinander verbunden sind, oft nur durch einige Daten, die zwischen einigen entfernten Modulen fließen.
Dies kann erfolgen, indem mehrere separate ausführbare Dateien miteinander kommunizieren, z. B. über Sockets, mit einem genaueren Zweck, und je nach Bedarf geladen / entladen werden. Kein konkreter Grund, warum es so gemacht wird.
In einer Hand funktioniert es und es funktioniert in Ordnung. Das Projekt ist einfacher, ohne den Build mehrerer Binärdateien beizubehalten. Die interne Struktur ist auch einfacher, wenn Sie einfach eine Methode aufrufen oder eine Variable lesen können, anstatt über Sockets oder Shared Memory zu sprechen.
Aber auf der anderen Seite macht mich die Größe, der Umfang dieses Dinges einfach fertig, es fühlt sich an, als würde ich die Titanic steuern. Mir wurde immer beigebracht, zu modularisieren, und alles in eine gigantische Datei zusammenzufassen, fühlt sich falsch an. Ein Problem, das ich kenne, ist ein schwerer Absturz eines (sogar unbedeutenden) Moduls, der alle abstürzt. Die Codequalität stellt jedoch sicher, dass dies in Release-Versionen nicht wirklich der Fall ist. Andernfalls stellen interne Trennung und defensive Programmierung sicher, dass dies größtenteils korrekt funktioniert, auch wenn die Hälfte der internen Module aus irgendeinem Grund normal ausfällt.
Welche anderen Gefahren habe ich übersehen? Warum kriecht mich das raus? Ist das nur irrationale Angst vor Unbekanntem? Ist es eine akzeptierte Praxis, ernsthafte Großprojekte auf diese Weise zu realisieren? Beruhigen Sie meine Befürchtungen oder geben Sie mir einen guten Grund, die Version 2.0 in mehrere kleinere Binärdateien umzuwandeln.