Одним из аргументов в пользу стандартного кода является то, что если вы измените его в одном месте, это повлияет только на один поток кода. Это должно быть уравновешено тем фактом, что чаще всего вы хотите, чтобы изменение затронуло каждый фрагмент кода, который его использует. Но я видел редкие примеры, которые подтверждают этот аргумент.
Допустим, у вас есть кусок кода, который говорит
public ForTheBar(Foo foo)
{
Bar bar = foo.bar();
return bar.BeFooed();
}
Это используется примерно в 2 местах в вашем коде.
Однажды кто-то приходит и говорит: «Хорошо, только на этом пути, мы хотим, чтобы вы заглушали бар перед тем, как его загнать».
И вы думаете: «Ну, это просто».
public ForTheBar(Foo foo, bool shouldIGrommit)
{
Bar bar = foo.bar();
if (shouldIGrommit)
{
bar.BeGrommitted();
}
return bar.BeFooed();
}
Затем ваш пользователь добавляет некоторые новые функции, и вы считаете, что он хорошо вписывается в FooTheBar. И вы покорно спрашиваете их, стоит ли Grommit в этом баре перед вами, Foo it, и они говорят «нет, не в этот раз».
Так что вы просто вызываете метод выше.
Но затем ваш пользователь говорит: «Хорошо, подождите, в третьем случае мы хотим, чтобы вы Doodle the Bar перед вызовом BeFooed».
Нет проблем, вы думаете, я могу это сделать.
public ForTheBar(Foo foo, bool shouldIGrommit, bool shouldIDoodle)
{
Bar bar = foo.bar();
if (shouldIGrommit)
{
bar.BeGrommitted();
}
if (shouldIDoodle)
{
bar.BeDoodled();
}
return bar.BeFooed();
}
Внезапно ваш код становится менее стандартным. Возможно, вы должны были принять повторяющиеся две строки кода. К настоящему времени у вас будет три куска кода, каждый длиной 2-3 строки и не выглядящий более повторяющимся.
Все это говорит, я бы возразил, что с «это не частый случай, и когда это произойдет, вы можете рефакторинг».
Еще один аргумент, который я недавно услышал, заключается в том, что стандартный код иногда помогает вам ориентироваться в коде. Пример, который мы обсуждали, был, где мы удалили тонны шаблонного кода отображения и заменили его AutoMapper. Теперь утверждается, что, поскольку все основано на соглашениях, вы не можете сказать "Где задано это свойство" среде IDE и ожидать, что она узнает.
Я видел, как люди спорили о вещах IoC.
Не сказать, что я с ними согласен, но, тем не менее, это справедливый аргумент.