2010-12-03 3 views
0

La méthode d'extraction (un refactoring du livre de Fowler) fonctionne très bien si votre méthode n'attribue aucune valeur. S'il affecte une valeur, cela devient la valeur de retour de la méthode extraite. Que faire s'il affecte deux valeurs?Comment extraire une méthode qui affecte deux valeurs?

Certains code C# pour illustrer:

private void someBigFunction() { 
doSomething(); 
doSomethingElse(); 

// start extraction here 
string first = Database.Select(...); 
// ... 
// next is dependent on the value of "first" 
int next = Database.Select(...); 
// ... 
// stop extraction here 

doMoreUselessStuff(); 
} 

Le code exact ou les valeurs ne sont pas importants ici. Le point est l'extraction de cette méthode. (Les deux valeurs sont liées, donc il est logique de les avoir dans la même méthode - et de ne pas faire deux méthodes.)

Les réponses possibles à cette question serait "return both in a array", "les retourner à la fois dans une structure de données de type paire, "ou" utiliser des paramètres (passer par référence) "- mais je cherche quelque chose de plus propre. (Le code réel est en Delphi, pas C#)

Répondre

0

Peut-être Sprout Class est ce que vous cherchez. Créez les variables d'instance de deux membres d'une nouvelle classe et extrayez cette méthode dans cette classe, en affectant les variables d'instance et en fournissant des getters à l'appelant. Ou, bien sûr, vous pouvez convertir les variables locales en variables d'instance de la classe d'origine. Cette conversion rend fréquemment la méthode d'extraction plus facile, mais vous vous retrouvez avec ce qui est sans doute un excès de variables d'instance. Avec la classe Sprout, vous avez une classe dont le seul but est de récupérer et de fournir ces valeurs, donc il ne fait aucun doute qu'elles méritent d'être des variables d'instance.

+0

Je n'aime pas faire des classes sans méthodes, mais cela résout proprement le problème. Et il est probable que lorsque vous commencerez à regrouper des variables, les méthodes suivront. – ashes999

Questions connexes