예, monkeypatching은 매우 유용합니다!
어쨌든 이름은 사람들의 인식에 큰 영향을 미치는 것 같습니다. "monkeypatch"라고 부르고 나쁘게 들리면 "핫픽스"또는 "온더 플라이"라고 부르면 좋습니다.
그것과는 별도로, 런타임에 메소드 / 속성 / 함수를 변경하는 기능은 매우 유용한 것이라고 생각합니다. 자바 스크립트 사용자조차도 하루 종일 모르게 사용합니다.
예를 들어 :
button.onclick = function(e) { ...}
이 간단한 라인은 버튼의 동작을 변경한다는 사실을 보여줍니다. 그런 식으로 설계되었습니다. 마찬가지로, 다른 모든 기능을 변경할 수는 있지만 어리석은 일입니다.
이제 패치를 이런 식으로 전달해야한다는 질문에 대해. 큰 릴리스 대신 작은 패치 만 다운로드하면됩니다. 서버를 멈추지 않고 패치 할 수도 있습니다. 그런 다음 언젠가 더 큰 업데이트를 위해 최신 릴리스를 가져올 수도 있습니다. 그럴 수 있지. 예, "런타임 패치"에 투표하는 것이 좋습니다.
흥미롭게도 Erlang과 같은 일부 언어는이 개념을 중심으로 구축되었습니다. 서버를 즉시 업데이트하는 기능.
물론 결국에는 다른 모든 것과 마찬가지로 사용 방법의 문제입니다. 당신은 멋진 OO 물건과 시끄러운 것을 만들 수 있습니다. 모두 동일합니다.
편집하다:
자신의 라이브러리를 패치하든 타사를 패치하든 상관없이 대소 문자 구분을 추가하겠습니다. .
... 기본적으로 이러한 패치로 수행하는 작업은 자신 또는 타사 라이브러리 의 버그를 수정하는 것 입니다. 두 경우 모두 유용합니다. 직접, 그것은 당신이 즉석에서 수정을 제공 할 수 있습니다. 타사의 경우 스스로 해결 할 때까지 (몇 달?) 기다리거나 지금 혼자서 수행하십시오. (여전히 패치를 제출하여 패치를 자신의 측면에서 수정하도록 할 수 있습니다). 문제가 해결 된 다음 lib 버전을 릴리스 해도 원하는 경우 여전히 할 수 있습니다 라이브러리를 업데이트하고 패치를 제거 .
물론, 패치를 사용하여 lib의 동작을 변경하고 그 목적 / 작업 방식을 소외시키는 것은 분명히 재난의 요리법입니다. 원숭이조차도 볼 수 있었을 것입니다. ;)