Le gros projet sur lequel je travaille depuis quelques années est une application de contrôle (et tout) d'un appareil avancé, cœur de son firmware.
L'appareil est assez avancé, avec plus de fonctionnalités différentes que je pourrais dire de la mémoire, et 98% d'entre eux sont gérés par cet énorme exécutable. D'une part, le programme est assez maintenable, bien modulaire à l'intérieur, correctement documenté, il y a une séparation raisonnable des fonctionnalités par répertoires et fichiers et ainsi de suite.
Mais au final, tout est regroupé dans une seule application qui fait tout, de la communication de base de données à distance, la manipulation de l'écran tactile, la gestion d'une douzaine de protocoles de communication divers, les mesures, plusieurs algorithmes de contrôle, la capture vidéo, l'heure et la date du lever du soleil de Pâques (sérieusement, et ils sont nécessaire à des fins très sérieuses!) ... En général, les choses qui sont très peu reliées, souvent liées uniquement à certaines données qui ruissellent entre certains modules éloignés.
Cela peut se faire sous la forme de plusieurs exécutables distincts communiquant entre eux, par exemple via des sockets, dans un but plus spécifique, peut-être chargés / déchargés selon les besoins, etc. Aucune raison précise pour laquelle il est fait de cette façon.
D'une part, cela fonctionne, et cela fonctionne bien. Le projet est plus simple, sans maintenir la construction de plusieurs binaires. La structure interne est également plus facile, lorsque vous pouvez simplement appeler une méthode ou lire une variable au lieu de parler via des sockets ou de la mémoire partagée.
Mais d'un autre côté, la taille, l'échelle de cette chose me font peur, c'est comme piloter Titanic. On m'a toujours appris à modulariser, et tout regrouper dans un fichier gargantuesque me semble mal. Un problème que je connais est un plantage important d'un module (même insignifiant) qui plante tout - mais la qualité du code garantit que cela ne se produit pas vraiment dans les versions. Sinon, la séparation interne et la programmation défensive garantissent que cela fonctionnera toujours correctement, même si la moitié des modules internes échouent normalement pour une raison quelconque.
Quels autres dangers ai-je négligés? Pourquoi est-ce que ça me fait peur? Est-ce juste une peur irrationnelle de l'inconnu? Faire de gros projets sérieux de cette façon est-il une pratique acceptée? Soit calmer mes craintes ou me donner une bonne raison de refactoriser la version 2.0 en plusieurs binaires plus petits.