Submergé par des milliers de lignes de code?
Avoir un jeu de tête/source des fichiers par catégorie dans un répertoire peut sembler exagéré. Et si le nombre de classes va vers les 100 ou 1000, il peut même être effrayant.
Mais après avoir joué avec des sources dans la philosophie "nous allons mettre ensemble tout", la conclusion est que seul celui qui a écrit le fichier a aucun espoir de ne pas être perdu à l'intérieur. Même avec un IDE, il est facile de manquer des choses parce que quand vous jouez avec une source de 20 000 lignes, vous venez de fermer votre esprit pour ce qui n'est pas exactement se référant à votre problème.
Exemple réel: la hiérarchie de classe définie dans ces milliers de lignes de sources refermé sur lui-même dans un diamant, de l'héritage, et certaines méthodes ont été redéfinies dans les classes enfant par des méthodes avec exactement le même code. Cela a été très facile de les oublier (qui veut explorer/check 20 000 lignes de code source?), et quand la méthode originale a été modifiée (correction de bug), l'effet n'était pas aussi universelle que l'exception.
Dépendances de devenir circulaire?
J'ai eu ce problème avec basé sur un modèle de code, mais j'ai vu des problèmes similaires avec des régulière, C++ et C du code.
Briser vos sources en 1 en-tête par struct/classe vous permet de:
- Accélérer la compilation car vous pouvez utiliser le symbole de l'avant-déclaration à la place de, y compris l'ensemble des objets
- Ont des dépendances circulaires entre les classes (§) (c'est à dire la classe A est un pointeur vers B, et B est un pointeur vers Une)
Dans sous contrôle de code source code, classe dépendances pourrait conduire à des déplacements réguliers de classes en haut et en bas du fichier, juste pour faire de l'en-tête de la compilation. Vous ne voulez pas d'étudier l'évolution de ces mouvements lorsque l'on compare le même fichier dans différentes versions.
La séparation des en-têtes rend le code plus modulaire, plus rapide à compiler, et facilite l'étude de son évolution à travers les différentes versions de diff
Pour mon modèle de programme, j'ai divisé mes en-têtes en deux fichiers: Le .PHP est un fichier contenant le modèle de déclaration de classe/de la définition et de la .INL fichier contenant les définitions des dit les méthodes de la classe.
Mettre tout ce code à l'intérieur d'un et un seul en-tête unique mettrait les définitions de classe au début de ce fichier, et la méthode définitions à la fin.
Et puis, si quelqu'un aurait besoin de seulement une petite partie du code, avec un en-tête de la seule solution, ils auraient à payer pour le ralentissement de la compilation.
(§) Notez que vous pouvez avoir des dépendances circulaires entre les classes si vous connaissez le nom de la classe qui possède. C'est une discussion sur les classes ayant connaissance de l'existence d'autres classes, pas shared_ptr dépendances circulaires antipattern.
Un dernier mot: les en-Têtes doivent être auto-sufficients
Une chose, cependant, qui doit être respectée par une solution de plusieurs en-têtes et de sources multiples.
Quand vous y ajoutez un en-tête, n'importe qui d'en-tête, votre source doit compiler proprement.
Chaque en-tête doit être auto-suffisante. Vous êtes censé développer le code, pas de trésor-la chasse par greping vos 10.000+ fichiers source du projet à trouver de qui en-tête définit le symbole de dans la de 1 000 lignes d'en-tête, vous devez inclure tout simplement parce que d' un enum.
Cela signifie que chaque en-tête définit ou de l'avant-déclarer tous les symboles qu'il utilise, ou inclure les en-têtes (et seulement les en-têtes).