Ein Argument für Boilerplate-Code ist, dass eine Änderung an einer Stelle nur einen Codefluss betrifft. Dies muss gegen die Tatsache abgewogen werden, dass Sie in den meisten Fällen tatsächlich eine Änderung wünschen, die sich auf jeden Code auswirkt, der sie verwendet. Aber ich habe seltene Beispiele gesehen, die das Argument stützen.
Nehmen wir an, Sie haben einen Code, der besagt
public ForTheBar(Foo foo)
{
Bar bar = foo.bar();
return bar.BeFooed();
}
Dies wird an ungefähr 2 Stellen in Ihrem Code verwendet.
Eines Tages kommt jemand vorbei und sagt: "Okay, nur auf diesem Weg möchten wir, dass Sie die Bar freigeben, bevor Sie sie feuern."
Und du denkst "gut das ist einfach."
public ForTheBar(Foo foo, bool shouldIGrommit)
{
Bar bar = foo.bar();
if (shouldIGrommit)
{
bar.BeGrommitted();
}
return bar.BeFooed();
}
Dann fügt Ihr Benutzer einige neue Funktionen hinzu, die Ihrer Meinung nach gut zu FooTheBar passen. Und du fragst sie pflichtbewusst, ob du diese Bar einkapseln solltest, bevor du es machst, und sie sagen "nein, diesmal nicht".
Also rufst du einfach die obige Methode auf.
Aber dann sagt Ihr Benutzer: "Okay, warten Sie, im dritten Fall möchten wir, dass Sie die Leiste kritzeln, bevor Sie BeFooed anrufen."
Kein Problem, denkst du, das kann ich.
public ForTheBar(Foo foo, bool shouldIGrommit, bool shouldIDoodle)
{
Bar bar = foo.bar();
if (shouldIGrommit)
{
bar.BeGrommitted();
}
if (shouldIDoodle)
{
bar.BeDoodled();
}
return bar.BeFooed();
}
Plötzlich wird Ihr Code weniger auffällig. Vielleicht hätten Sie die wiederholten zwei Codezeilen akzeptieren sollen. Inzwischen haben Sie drei Code-Teile, die jeweils 2-3 Zeilen lang sind und nicht mehr sehr wiederholt aussehen.
All dies sagte, ich würde dem mit "Dies ist kein gewöhnlicher Fall, und wenn es passiert, können Sie refactor."
Ein weiteres Argument, das ich kürzlich gehört habe, ist, dass Boilerplate-Code manchmal beim Navigieren im Code helfen kann. Das besprochene Beispiel war, wo wir Tonnen von Boilerplate-Mapping-Code entfernt und durch AutoMapper ersetzt hatten. Nun, es wurde argumentiert, da alles auf Konventionen basiert, können Sie der IDE nicht sagen, wo diese Eigenschaft festgelegt ist, und erwarten, dass sie es weiß.
Ich habe Leute gesehen, die ähnliche Dinge über IoC-Container diskutierten.
Um nicht zu sagen, dass ich ihnen zustimme, aber es ist trotzdem ein faires Argument.