2009-08-18 7 views
5

Dans mon projet C j'ai un assez gros fichier utils.c. Il est vraiment plein de nombreux utilitaires de différentes sortes. Je me sens un peu coquine juste en train de bourrer différentes fonctions diverses. Par exemple, il a quelques utilitaires liés à des choses de bas niveau, comme une fonction en minuscules(), et il a aussi des utilitaires assez sophistiqués tels que la conversion de/vers différents formats de couleurs.Est-il vilain d'avoir un gros fichier utilitaire?

Ma question est, est-il très méchant d'avoir un tel utils.c avec beaucoup de différents types d'utilitaires en elle? Dois-je le décomposer en plusieurs types de fichiers utilitaires? Tels que graphics_utils.c et ainsi de suite Que pensez-vous?

+0

Naughty = Désorganisé? – Alex

+0

Domenic, j'ai l'impression que les réponses à cet article (qui semblent toutes dire la même chose) sont «subjectives» dans le même sens qu'un motif de design est «subjectif»;) En d'autres termes, l'étiquette «subjective» est inappropriée :) – horseyguy

+3

Non, vilain = allumé. –

Répondre

6

Si c'est vous qui gardez toujours les choses, c'est une question de temps où la complexité atteint le point où vous vous trouvez à la recherche de choses. Ce serait le moment de refactoriser et de réorganiser (il y a un coût à réorganiser, tout comme il y a un coût à ne pas réorganiser).

S'il est POSSIBLE que quelqu'un d'autre maintienne un projet qui inclut vos utils, vous devez considérer LEUR point de douleur au moment de décider quand réorganiser. Leur est BEAUCOUP plus bas que le vôtre.

6

J'ai tendance à les décomposer en différents sous-utils comme vous le dites (graphics_utils) quand cela devient approprié.

9

En les décomposant dans des fichiers séparés en fonction des catégories (graphismes, chaînes, etc.), vous obtiendrez une meilleure organisation, ce qui facilitera la localisation de certains éléments de code, avec des fichiers plus petits, au lieu d'un seul grand fichier.

2

Ce n'est certainement pas casher, parce que le prochain gars qui passe votre code ne saura pas où chercher quoi que ce soit. Brisez par fonction, et vos collègues vous remercieront!

+4

Bien sûr, il le fera. Ce sera dans le fichier d'utilitaires géant! – womp

+1

@womp: lol + 5chars –

3

Brisez le. Les choses seront plus faciles à trouver, plus faciles à réutiliser, plus faciles à refactoriser, plus faciles à tester. J'ai récemment eu besoin d'un ensemble de méthodes de gestion de date ISO-8601 à partir d'une classe d'utilitaires Java gigantesque de méthodes statiques, et il était vraiment difficile de trouver les 5% du code dont j'avais besoin.

0

Comme tout le monde je voudrais les briser. Mais j'ai tendance à utiliser les méthodes d'extension maintenant, donc j'aurais une classe (et un fichier) par classe étant étendue (par exemple StringExtensions, SqlDataReaderExtensions, etc). Je trouve que cela tend à briser les méthodes d'utilité bien.

7

Vous voulez le décomposer, non seulement pour des raisons d'organisation, mais parce que vous aurez beaucoup d'autres fichiers qui dépendent de celui-ci. Comme tout dépend de ce fichier, il est difficile de changer ce fichier car il pourrait provoquer une casse généralisée.

http://ifacethoughts.net/2006/04/15/stable-dependencies-principle/

+0

cela peut aussi rendre le temps de compilation moins optimal puisque tout ce qui est lié à ce fichier devra être recompilé s'il change. –

2

Un autre avantage qui vient de se casser le fichier en sépare est que lorsque vous placez sous contrôle de code source, vous pouvez avoir un contrôle plus précis à grain fin. Ceci est vraiment utile si vous avez des bits qui sont modifiés/étendus/spécialisés fréquemment, et d'autres bits qui sont relativement stables.

2

Un autre point: Vous devez organiser votre code, i. e. divisez-le en modules plus petits et catégorisez-le, car à un certain moment vous finirez par écrire une deuxième et une troisième fonction pour la même chose, simplement parce que vous ne trouverez pas cette fonction que vous saviez qu'elle était là, mais vous Je ne me souviens pas de son nom.

J'ai un projet (plutôt grand) avec un tel module et il y a une logique de programmation pour laquelle il y a jusqu'à 5-6 implémentations (pour la même chose).