Il grande progetto a cui sto lavorando da un paio d'anni è un'applicazione di controllo (e tutto) di un dispositivo avanzato, cuore del suo firmware.
Il dispositivo è piuttosto avanzato, con funzionalità più diverse di quanto potrei dire dalla memoria, e il 98% di esse è gestito da questo enorme eseguibile. In una mano, il programma è abbastanza mantenibile, ben modulare all'interno, adeguatamente documentato, c'è una ragionevole separazione delle funzionalità da directory e file e così via.
Ma alla fine viene tutto raggruppato in un'unica applicazione che fa di tutto, dalla comunicazione remota al database, alla gestione del touchscreen, alla gestione di una dozzina di vari protocolli di comunicazione, misurazioni, diversi algoritmi di controllo, acquisizione video, ora dell'alba e data di pasqua (sul serio, e sono necessario per scopi molto seri!) ... In generale, roba che è molto sottilmente correlata, spesso collegata solo attraverso alcuni dati che trapelano tra alcuni moduli distanti.
Potrebbe essere fatto come diversi eseguibili separati che comunicano tra loro, ad esempio su socket, con scopi più specifici, magari caricati / scaricati secondo necessità, e così via. Nessun motivo specifico per cui è stato realizzato in questo modo.
In una mano, funziona e funziona bene. Il progetto è più semplice, senza mantenere la compilazione di più binari. Anche la struttura interna è più semplice, quando puoi semplicemente chiamare un metodo o leggere una variabile invece di parlare tramite socket o memoria condivisa.
Ma d'altra parte, la dimensione, la scala di questa cosa mi fa semplicemente paura, mi sembra di pilotare Titanic. Mi è stato sempre insegnato a modularizzare e raggruppare tutto in un file gigantesco mi sembra sbagliato. Un problema che conosco è un grave arresto anomalo di un modulo (anche insignificante) che si arresta in modo anomalo, ma la qualità del codice assicura che ciò non accada realmente nelle versioni di rilascio. Altrimenti, la separazione interna e la programmazione difensiva assicurano che ciò funzionerà per lo più correttamente anche se la metà dei moduli interni non funziona normalmente per qualche motivo.
Quali altri pericoli ho trascurato? Perché questo mi fa paura? È solo una paura irrazionale dell'ignoto? Realizzare progetti così importanti in questo modo è una pratica accettata? Calma le mie paure o dammi una buona ragione per rifattare la versione 2.0 in più binari più piccoli.