상용구 코드를 선호하는 한 가지 주장은 한 곳에서 변경하면 코드의 한 흐름에만 영향을 미친다는 것입니다. 이것은 종종 변경 사항을 사용하는 모든 코드에 영향을 미치기를 원한다는 사실과 균형을 이루어야합니다. 그러나 나는 논쟁을 뒷받침하는 드문 예를 보았습니다.
다음과 같은 코드가 있다고 가정 해 봅시다.
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와 잘 어울립니다. 그리고 당신은 당신이 Foo 그것을하기 전에 그 막대기를 Grommit해야하는지 정중하게 그들에게 물었다.
따라서 위의 방법을 호출하면됩니다.
그러나 사용자는 "알겠습니다. 세 번째 경우 BeFooed에 전화하기 전에 Bar를 낙서하길 원합니다."라고 말합니다.
문제 없습니다. 그렇게 할 수 있습니다.
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 줄 길이의 코드가 3 개 더 이상 반복되지 않습니다.
이 모든 것, 나는 "이것은 일반적인 경우가 아니며, 일어날 때 리팩토링 할 수 있습니다."
내가 최근에 들었던 또 다른 주장은 상용구 코드가 때로는 코드 탐색에 도움이 될 수 있다는 것입니다. 우리가 논의한 예제는 수많은 상용구 매핑 코드를 제거하고 AutoMapper로 대체 한 곳입니다. 이제는 모든 것이 규칙 기반이기 때문에 IDE에 "이 속성 집합이 어디에 있습니까?"라고 말할 수는 없습니다.
사람들이 IoC 컨테이너에 대해 비슷한 것을 주장하는 것을 보았습니다.
내가 그들에게 동의한다고 말할 수는 없지만 그럼에도 불구하고 공정한 논쟁입니다.