[debat] utilisation des libs/dll/a/so dans une grosse application
Bonjour,
lorsqu'on part sur la conception d'un grosse application, il y a tout un tas de choix à faire. Notemment celui de la modularité: il faut découper notre programme en modules le plus indépendants possibles afin de faciliter le développement, les tests et la maintenance.
En c++ (et dans la plupart des langages il me semble), pour faire cela on va découper notre programme en bibliothèques, statiques ou dynamiques, qui seront autant de sous-projets.
Pour poursuivre la discussion et l'illustrer, prenons un exemple (presque) concret. Un programme BigProject, qui contiendra:
. une interface graphique relativement complexe (plusieurs écrans, toute sortes de contrôles, etc.)
. des accès à une grosse base de données (lecture et écriture)
. plusieurs thread permettant d'effectuer plusieurs tâches en parrallèle et faire des choses sans bloquer l'IHM
. plusieurs types de traitements de données très différents. Par exemple, un module qui traite des images, un autre qui fait des calculs sur des séries contenues en base de donnée, etc.
. une interface réseau qui permet d'échanger des données avec des serveurs (webservices avec SOAP par exemple) externes.
. un moteur de règles, qui s'applique à chaque résultat avant qu'il ne soit affiché
Première étape, appliquons un MVC "bourrin" => on obtiens 3 gros modules:
1. la gestion des données (base de données, modules réseau, traitements) [Model]
2. l'IHM [View]
3. la gestion des threads, l'organisation des tâches et des règles [Controller]
Si l'on en reste là, on va obtenir 2 grosses bibliothèques (Model et Controller) et un gros exécutable (View).
Maintenant la question est: doit-on continuer à découper chacun de ces trois modules en sous-modules sous formes de petites bibliothèques?
Plus précisément, les questions qui se posent sont:
1. la rapidité d'exécution: si on a décidé de séparer un module (une bibliothèque) en 2, mais qu'une des bibliothèque fait 1000 appels par seconde à une fonction de l'autre bibliothèque, ne va-t-on pas perdre en rapidité d'exécution?
2. maintenance: est-ce que ça ne devient pas trop compliqué au bout d'un moment, d'avoir 50 dlls/libs différentes, avec des dizaines de versions pour chacune?
3. gestion des dépendances: est-ce que les inter-dépendances entre les différentes libs peuvent finir par poser de gros problèmes? (dépendances circulaires par exemple)
4. statique vs dynamique: dans quel(s) cas est-il préférable d'utiliser des bibliothèques statiques ou dynamiques?
5. existe-t-il des "best practices" concernant ce découpage en modules?