web-dev-qa-db-fra.com

Répétition de code VS Méthode multi-responsable

J'essaie de suivre le principe de responsabilité unique (SRP) et également à omettre les répétitions de code. Cependant, il existe souvent des endroits où il existe des répétitions de code qui ne sont rien de plus que des blocs de code d'invocations qui résistent à l'extraction de la méthode nommée au moins.

DoAction1();
DoAction2();

if (value)
    DoAction3();

DoAction4();

Quelle est la meilleure façon d'extraire un tel code dans une méthode et comment le nommer?

11
yBee

J'ai eu une situation qui peut être similaire à la vôtre:

Il y a une classe qui définit la fonctionnalité de l'objet qu'il représente:

class Functionality
{
protected:
void functionA();
void functionB();
...
void functionZ();
}

Ensuite, il existe une classe qui définit les flux de travail pour des opérations de haut niveau que l'objet effectue:

class Workflows: private Functionality
{
    void WorkflowA()
    {
        functionA();

        if (m_bValue) {
            functionB();
        }

        functionC();
    }
    ...
    void WorkflowB();
}

Si vous êtes dans une situation similaire, identifiez-vous quoi Vos classes représentent (dans ce cas de fonctionnalité/flux de travail), puis nomment les méthodes en conséquence.

Disclaimer: les noms de classe utilisés dans cet exemple sont grossièrement inexacts, mais les noms de méthode donnent un indice. Discrétion conseillée.

1
dotbugfix