Javascript 개발자로서 기존 디자인 패턴을 다른 언어 / 환경에서보다 중요하거나 덜 중요하게 생각하십니까?.
클래식 디자인 패턴은 JavaScript에 적용되지 않습니다.
적용되는 것은 모듈 식 및 기능적 코드 작성입니다.
생성자와 일급 함수를 혼합하여 사용해야합니다.
JavaScript 개발자로서 저는 개인적으로 JavaScript를 Java가 아닌 LISP로 취급하려고합니다. 따라서 모나드와 고급 기능적 스타일 코드를 에뮬레이션하는 대신 고전적인 OOP 코드를 에뮬레이션하십시오.
Javascript 개발자가 정기적으로 사용하는 상위 3 가지 디자인 패턴의 이름을 지정하고 Javascript 개발에 어떻게 도움이되었는지에 대한 예를 제공하십시오.
다시 디자인 패턴은 그다지 적용되지 않지만 아래는 세 가지 중요한 구성입니다.
- 폐쇄 사용
- 일급 함수 사용
- 유무에 관계없이 객체 팩토리 사용
new
전통적인 디자인 패턴을 사용하여 동일한 종류의 코드를 수행하는 것과 비교할 때 이러한 기술의 예를 보여줄 수있는 컨텍스트를 남겨 두십시오.
고전적인 디자인 패턴 중 일부 와 js에서 구현하는 방법과 js에 더 적합한 대안 패턴을 살펴 보겠습니다 .
관찰자 패턴 :
에서 node.js
이 단순히이다 events.EventEmitter
. 에서 jQuery
이입니다 $.fn.bind
&& $.fn.trigger
. 에서 backbone
이것이다 Backbone.Events.trigger
하고 Backbone.Events.bind
. 이것은 일상적인 코드에서 사용되는 매우 일반적인 패턴입니다.
나는 멈추지 않고 "여기서 관찰자 패턴을 사용하고 있습니다!"라고 생각하지 않습니다. 아니요, 이는 메시지를 전달하는 낮은 수준의 방법이거나 변경 사항을 캐스케이드하는 방법 일뿐입니다.
예를 들어 백본에서 모든 MVC 뷰는 모델 onchange
이벤트에 바인딩 되므로 모델을 변경하면 모든 변경 사항이 뷰에 자동으로 연계됩니다. 예, 이것은 강력한 패턴이지만, 사용되지 않는 이벤트 중심 프로그래밍에서는 매우 일반적으로 사용됩니다.
WebSocket
프로토콜 에서는 이벤트 .on
에 바인딩하는 데 사용 on("message", ...
합니다. 다시 말하지만 이것은 매우 일반적이지만 클래식 OOP 기반이 아닌 스트림의 관찰자입니다 while (byte b = Stream.ReadNextByte())
.
이것들은 모두 Observer 패턴을 강력하게 사용합니다. 그러나 이것은 사용하는 패턴이 아닙니다. 이것은 언어의 간단한 부분입니다. 이것은 단지 코드입니다.
메멘토 패턴 :
이것은 단순히 JSON입니다. 작업 상태를 취소 할 수 있도록 개체의 상태를 직렬화 할 수 있습니다.
function SomeObject() {
var internalState;
this.toJSON = function() {
return internalState;
}
this.set = function(data) {
internalState = data;
}
this.restore = function(json) {
internalState = JSON.parse(json);
}
}
var o = new SomeObject();
o.set("foo"); // foo
var memento = JSON.stringify(o);
o.set("bar"); // bar
o.restore(memento);
JavaScript에서는 기본적으로 mementos 용 API를 지원합니다. toJSON
모든 객체에서 호출되는 메소드를 정의하십시오 . 호출 JSON.stringify
하면 내부적으로 .toJSON
객체를 호출 하여 JSON으로 직렬화하려는 실제 데이터를 가져옵니다.
이를 통해 사소한 코드 스냅 샷을 만들 수 있습니다.
다시 한 번 나는 이것을 기억할 수 없다. 이것은 단순히 JSON 인 직렬화 도구를 사용하는 것입니다.
상태 패턴 / 전략 패턴 :
상태 패턴이 필요하지 않습니다. 일급 함수와 동적 유형이 있습니다. 기능을 주입하거나 속성을 즉시 변경하십시오.