Одним з аргументів на користь кодової панелі є те, що якщо змінити його в одному місці, він впливає лише на один потік коду. Це повинно бути врівноважене тим, що частіше за все ви хочете, щоб зміни впливали на кожен фрагмент коду, який його використовує. Але я бачив рідкісні приклади, які підтверджують цей аргумент.
Скажімо, у вас є фрагмент коду, який говорить
public ForTheBar(Foo foo)
{
Bar bar = foo.bar();
return bar.BeFooed();
}
Це використовується приблизно у двох місцях у вашому коді.
Одного разу хтось приходить разом і каже "добре, тільки на цьому шляху, ми хочемо, щоб ви віддалили планку перед тим, як опустити її".
І ти думаєш, "ну це просто".
public ForTheBar(Foo foo, bool shouldIGrommit)
{
Bar bar = foo.bar();
if (shouldIGrommit)
{
bar.BeGrommitted();
}
return bar.BeFooed();
}
Тоді ваш користувач додає нову функціональність, і ви вважаєте, що вона добре відповідає FooTheBar. І ви слушно запитуєте їх, чи варто вам відмовити цю смужку перед тим, як Foo це, і вони кажуть "ні, не на цей раз".
Отже, ви просто зателефонували вищевказаному методу
Але тоді ваш користувач каже "добре, зачекайте, в третьому випадку ми хочемо, щоб ви Doodle 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.
Не кажучи про те, що я з ними згоден, але все-таки це справедливий аргумент.