Um argumento a favor do código clichê é que, se você o alterar em um só lugar, ele afeta apenas um fluxo do código. Isso deve ser equilibrado com o fato de que, na maioria das vezes, você realmente deseja que uma mudança afete cada parte do código que a usa. Mas vi exemplos raros que apóiam o argumento.
Digamos que você tenha um código que diz
public ForTheBar(Foo foo)
{
Bar bar = foo.bar();
return bar.BeFooed();
}
Isso é usado em cerca de 2 lugares no seu código.
Um dia, alguém aparece e diz: "ok, apenas neste caminho, queremos que você abra o bar antes de ir embora".
E você pensa "bem, isso é simples".
public ForTheBar(Foo foo, bool shouldIGrommit)
{
Bar bar = foo.bar();
if (shouldIGrommit)
{
bar.BeGrommitted();
}
return bar.BeFooed();
}
Em seguida, seu usuário adiciona algumas novas funcionalidades e você acha que elas se encaixam bem com o FooTheBar. E você obedientemente pergunta a eles se você deve Grommit aquela barra antes de você tocar e eles dizem "não, não desta vez".
Então você acabou de chamar o método acima.
Mas então o usuário diz "ok, espere, no terceiro caso, queremos que você faça o Doodle the Bar antes de ligar para o BeFooed".
Não tem problema, você pensa, eu posso fazer isso.
public ForTheBar(Foo foo, bool shouldIGrommit, bool shouldIDoodle)
{
Bar bar = foo.bar();
if (shouldIGrommit)
{
bar.BeGrommitted();
}
if (shouldIDoodle)
{
bar.BeDoodled();
}
return bar.BeFooed();
}
De repente, seu código está se tornando menos padronizado. Talvez você devesse ter aceitado as duas linhas de código repetidas. A essa altura, você teria três códigos, cada um com duas a três linhas e não parecendo mais repetir.
Tudo isso dito, eu diria que "esse não é um caso comum e, quando isso acontece, você pode refatorar".
Outro argumento que ouvi recentemente é que o código clichê às vezes pode ajudá-lo a navegar pelo código. O exemplo que discutimos foi onde removemos toneladas de código de mapeamento padrão e o substituímos pelo AutoMapper. Agora, argumentou-se, porque tudo é baseado em convenções, você não pode dizer "Onde esta propriedade está definida" para o IDE e esperar que ele saiba.
Já vi pessoas discutindo coisas semelhantes sobre contêineres IoC.
Para não dizer que concordo com eles, mas é um argumento justo.