web-dev-qa-db-fra.com

Si une méthode doit faire une chose et être bonne?

"Extraire jusqu'à ce que tu déposes" est quelque chose que j'ai lu dans le blog de l'oncle Bob, ce qui signifie qu'une méthode devrait faire seule une chose à elle seule.

Qu'est-ce qu'une chose? Quand devriez-vous arrêter d'extraire des méthodes?

Disons que j'ai une classe de connexion avec les méthodes suivantes:

 public string getAssistantsPassword()
 public string getAdministratorsPassword()

Celles-ci récupérent le mot de passe des comptes respectifs dans la base de données. Puis:

 public bool isLogInOk()

La méthode compare le mot de passe appelé ou sélectionné et voit si le mot de passe fourni par l'utilisateur est dans la base de données.

Est-ce un exemple d'extrait "extraire jusqu'à ce que vous déposiez"? Quand saurez-vous quand vous faites trop d'extraction?

11
KyelJmD

Vous avez extrait Trop quand Votre code lui-même est plus clair que le nom de la méthode.

Gardez à l'esprit, quand vous n'êtes pas sûr, presque tout programmeur que j'ai vu a construit des méthodes beaucoup plus grandes et monolithiques que optimales, plutôt que l'inverse.

Une méthode avec quelques lignes de code seulement est assez typique de l'application/bibliothèque bien conçue.

26
Boris Yankov

Pour citer Clean Code, sur la page 36, il est indiqué:

Donc, une autre façon de savoir qu'une fonction fait plus que "une chose" est si vous pouvez extraire une autre fonction de celui-ci avec un nom qui n'est pas simplement un retraitement de sa mise en œuvre.

10
BЈовић

L'idée générale est que vous avez terminé d'extraire lorsqu'il n'y a rien d'autre que vous pouvez extraire et obtenez toujours un morceau de code logique. S'il y a une partie d'une fonction pouvant être retirée, si cela fait quelque chose que vous pouvez décrire et donner un nom à, et si vous pouvez imaginer que vous devriez peut-être appeler cela d'une autre partie de votre code, vous devriez extraire ce.

[.____] Même si vous n'avez jamais besoin de l'appeler d'une autre partie de votre code, le fait qu'il s'agisse d'une fonction distincte signifie que vous pouvez écrire des tests d'unité pour elle seule, ce qui améliore votre détection de bogue et signifie que vous pouvez le profiler de manière indépendante. , qui améliore votre capacité à évaluer les pertes de performance dans votre code.

[.____ puis extraire ce code. Si vous êtes inquiet pour la performance, vous pouvez toujours l'aligner plus tard.

5
Dan