Salah satu argumen yang mendukung kode boilerplate adalah bahwa jika Anda mengubahnya di satu tempat, itu hanya mempengaruhi satu aliran kode. Ini harus diseimbangkan dengan fakta bahwa lebih-sering-daripada-tidak, Anda benar-benar ingin perubahan mempengaruhi setiap bagian dari kode yang menggunakannya. Tetapi saya telah melihat contoh langka yang mendukung argumen.
Katakanlah Anda memiliki kode yang bertuliskan
public ForTheBar(Foo foo)
{
Bar bar = foo.bar();
return bar.BeFooed();
}
Ini digunakan di sekitar 2 tempat dalam kode Anda.
Suatu hari seseorang datang dan berkata "ok, di jalur ini saja, kami ingin Anda Grommit bar sebelum Fooing itu."
Dan Anda berpikir "yah ini sederhana."
public ForTheBar(Foo foo, bool shouldIGrommit)
{
Bar bar = foo.bar();
if (shouldIGrommit)
{
bar.BeGrommitted();
}
return bar.BeFooed();
}
Kemudian pengguna Anda menambahkan beberapa fungsi baru dan Anda merasa cocok dengan FooTheBar. Dan Anda patuh bertanya kepada mereka apakah Anda harus Grommit bar itu sebelum Anda Foo dan mereka berkata "tidak, tidak kali ini".
Jadi Anda tinggal memanggil metode di atas.
Tetapi kemudian pengguna Anda berkata "ok, tunggu, dalam kasus ketiga, kami ingin Anda mencoret-coret Bar sebelum menelepon BeFooed."
Tidak masalah, Anda pikir, saya bisa melakukannya.
public ForTheBar(Foo foo, bool shouldIGrommit, bool shouldIDoodle)
{
Bar bar = foo.bar();
if (shouldIGrommit)
{
bar.BeGrommitted();
}
if (shouldIDoodle)
{
bar.BeDoodled();
}
return bar.BeFooed();
}
Tiba-tiba kode Anda menjadi kurang matang. Mungkin Anda seharusnya menerima dua baris kode yang berulang. Sekarang Anda akan memiliki tiga potong kode, masing-masing panjangnya 2-3 baris dan tidak terlihat berulang lagi.
Semua ini berkata, saya akan membantah bahwa dengan "ini bukan kasus yang umum, dan ketika itu terjadi, Anda dapat refactor."
Argumen lain yang baru-baru ini saya dengar adalah bahwa kode boilerplate terkadang dapat membantu Anda menavigasi kode. Contoh yang kami diskusikan adalah di mana kami telah menghapus banyak kode pemetaan boilerplate dan menggantinya dengan AutoMapper. Sekarang, itu diperdebatkan, karena semuanya berbasis konvensi, Anda tidak bisa mengatakan "Di mana properti ini diatur," ke IDE dan berharap untuk mengetahuinya.
Saya telah melihat orang-orang memperdebatkan hal-hal serupa tentang wadah IoC.
Bukan untuk mengatakan bahwa saya setuju dengan mereka, tetapi itu adalah argumen yang adil.