Il grande progetto su cui sto lavorando da un paio d'anni è un'applicazione di controllo (e di tutto) di un dispositivo avanzato, cuore del suo firmware.
Il dispositivo è abbastanza avanzato, con funzionalità più diverse di quelle che potrei dire dalla memoria, e il 98% di esse sono gestite da questo enorme eseguibile. In una mano, il programma è abbastanza gestibile, ben strutturato all'interno, adeguatamente documentato, c'è una ragionevole separazione di funzionalità da directory e file e così via.
Ma alla fine viene tutto raggruppato in un'unica applicazione che fa tutto, dalla comunicazione remota del 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 della pasqua (seriamente, e sono necessari per scopi molto seri!) ... In generale, cose che sono molto sottilmente correlate, spesso legate solo attraverso alcuni dati che scorre tra alcuni moduli lontani.
Potrebbe essere fatto come diversi eseguibili separati che comunicano tra loro, ad esempio su socket, con uno scopo più specifico, magari caricati / scaricati secondo necessità e così via. Nessun motivo specifico per cui è stato creato in questo modo.
In una mano, funziona, e funziona bene. Il progetto è più semplice, senza mantenere la compilazione di più file binari. Anche la struttura interna è più semplice, quando puoi semplicemente chiamare un metodo o leggere una variabile invece di parlare su socket o memoria condivisa.
Ma d'altra parte, le dimensioni, la scala di questa cosa mi fanno strisciare fuori, mi sembra di pilotare Titanic. Mi è sempre stato insegnato a modulare, e raggruppare tutto in un file gigantesco mi sembra sbagliato. Un problema che conosco è un crash grave di un (anche insignificante) crash di tutti i moduli - ma la qualità del codice assicura che ciò non avvenga realmente nelle versioni di rilascio. In caso contrario, la separazione interna e la programmazione difensiva assicurano che questo funzionerà ancora correttamente anche se per qualche motivo metà dei moduli interni non funziona correttamente.
Quali altri pericoli ho trascurato? Perché questo mi insinua? È solo una paura irrazionale di sconosciuto? Sta facendo grandi progetti seri in questo modo una pratica accettata? O calma le mie paure o dammi una buona ragione per refactoring versione 2.0 in più file binari più piccoli.