C'est la langue agnostique, mais je travaille avec Java actuellement. P>
J'ai une classe ODP qui fait des choses. Il possède deux méthodes d'assistance privées, dont l'une détermine la valeur max dans un int [] [] [], et l'autre renvoie les occurrences d'un caractère dans une chaîne. P>
Celles-ci ne sont pas directement liées à la tâche à la main et semblent être réutilisées dans les projets futurs. Où est le meilleur endroit pour mettre ce code? P>
Le rendre public - mauvais, car la fonctionnalité de l'ODP n'est pas directement liée, et ces méthodes privées sont un détail de mise en œuvre qui n'a pas besoin d'être dans l'interface publique. P> LI>
les déplacer à une classe différente - mais qu'est-ce que cette classe serait appelée? Misc thewnootherHome? Il n'y a pas de thème unifiant pour eux. P> li>
Laissez-le privé et copier / coller dans d'autres classes si nécessaire - Bad P> Li> ol>
Que pourrais-je faire d'autre? P>
8 Réponses :
Beaucoup de gens créent une classe d'utilité avec de nombreuses méthodes telles que statiques. Certaines personnes n'aiment pas cette approche, mais je pense que cela frappe un équilibre entre la conception, la réutilisation du code et la praticité. P>
L'option 2 est probablement votre meilleur choix en Java, malgré l'insatisfaisant. Java n'est pas satisfaisante, donc pas de surprise là-bas. p>
Une autre option peut être d'utiliser le prétraiteur C dans la partie de votre processus de construction. Vous pouvez mettre des fonctions statiques privées dans le fichier sans classe, puis inclure ce fichier quelque part dans une classe que vous souhaitez l'utiliser. Cela peut avoir un effet sur la taille de vos fichiers de classe si vous allez à la mer, bien sûr . p>
Si c'était moi, je: P>
La plupart du temps que je finis avec 1, bien que les méthodes d'assistant que j'écris sont généralement un peu plus spécifiques que celles que vous avez mentionnées, il est donc plus facile de proposer un nom de classe. P>
Voici une solution: p>
Déplacez la méthode qui détermine la valeur maximale de Te Max dans un tableau INT bidimensionnel sur une classe publique appelée intitils et placez la classe à un package UTIL. P>
Mettez la méthode qui renvoie les occurrences d'un caractère dans une chaîne à une classe pucléique appelée Stringutils et mettez la classe à un package UTIL. P>
Il n'y a rien de particulièrement mauvais de la rédaction de classes d'assistance statiques en Java. Mais assurez-vous de ne pas réinventer la roue; Les méthodes que vous venez de décrire peuvent déjà être dans certaines bibliothèques du système d'exploitation, telles que Jakarta Commons . P>
Je ne sais pas ce que les autres langues font, mais j'ai la voix de l'expérience en Java à ce sujet: il suffit de passer à la fin de votre classe et d'écrire ce dont vous avez besoin (ou de classe imbriquée si vous préférez comme cela est accepté Canonical Convention en Java) P>
Déplacez la classe d'étendue de fichier (classe d'accès par défaut à droite dans le fichier) à sa propre unité de compilation (classe publique dans son propre fichier) lorsque le compilateur gémit à ce sujet. P>
Voir les commentaires des autres sur les classes imbriquées du même nom si des classes divergentes ont la même fonctionnalité dans la classe imbriquée du même nom. Ce qui se passera sur les bases de code plus vastes est que les deux divergent au fil du temps et créeront des problèmes de maintenabilité qui cèdent au nom de la classe de Java en tant que type de convention de frappe de classe qui vous oblige à résoudre le problème d'une manière ou d'une autre. P>
Que pourrais-je faire d'autre? P> blockQuote>
Soyez prudent de ne pas céder aux impulsions débutantes à ce sujet. Votre 1-2 coup de poing ongles, résistez à la tentation. P>
Message Edition: par Bobby Shaftoe Voir les interfaces peut fonctionner comme une recherche sur le Web. Cela simplifie la matière pour la plupart des facteurs de stress.
Dans mon expérience, la plupart des grands projets auront des fichiers pour les fonctions "générales", qui sont généralement toutes sortes de fonctions d'assistance telles que celui-ci qui n'ont pas de bibliothèque de langage intégrée. P>
Dans votre cas, je créerais un nouveau dossier (nouveau package pour Java) appelé "Général", puis créer un fichier pour regrouper des fonctions (pour Java, ce sera simplement une classe avec beaucoup de membres statiques). p>
Par exemple, dans votre cas, j'aurais quelque chose comme: Général / Arrayutils.java, et dans la mesure où je voudrais lancer votre fonction et toute autre fonction dont vous avez besoin. P>
ne vous inquiétez pas strong> pour le moment, cela fait une nouvelle classe (et un nouveau paquet) pour une seule fonction. Comme vous l'avez dit dans la question, ce sera quelque chose que vous utiliserez pour le prochain projet et le prochain. Au fil du temps, ce forfait "général" commencera à grandir toutes sortes de très grandes classes d'assistrations, telles que les mathutils, les Stringutils, etc., que vous pouvez facilement copier sur chaque projet que vous travaillez. P>
Attendez que vous en ayez besoin! P>
Vos cours seront mieux pour cela, car vous n'avez aucune idée pour la raison pour laquelle vos besoins futurs exacts seront. p>
Lorsque vous êtes prêt, dans Eclipse "Méthode d'extrait". P>
Edit: J'ai constaté que le développement axé sur les tests donnent du code plus facile à réutiliser parce que vous pensez de l'API à l'avance. p>
Vous devez éviter les cours d'assistance si vous le pouvez, car cela crée des dépendances redondantes. Au lieu de cela, si les classes utilisant les méthodes d'assistant sont du même type (que KBrase a écrit), créez une superclasse abstraite contenant les méthodes. P>
Si vous choisissez de faire une classe distincte, envisagez de le faire emballer local, ou au moins les méthodes, car il peut ne pas avoir de sens pour des projets plus petits. Si vos méthodes d'assistance sont quelque chose que vous utiliserez entre des projets, une approche de type bibliothèque est la plus agréable au code, comme mentionné Edan Maor. P>
Vous pouvez faire un projet distinct appelé utils ou quelque chose, où vous ajoutez les classes nécessaires et joignez-les en tant que bibliothèque au projet que vous travaillez. Ensuite, vous pouvez facilement faire des mises à jour / corrections de bibliothèque inter-projet par une modification. Vous pouvez faire un paquet pour ces outils, même s'ils ne sont peut-être pas cet unifié (Java.util Quelqu'un)? P>