>웹 프론트엔드 >JS 튜토리얼 >yui3_YUI.Ext 관련 AOP(관점 지향 프로그래밍) 및 OOP(객체 지향 프로그래밍)

yui3_YUI.Ext 관련 AOP(관점 지향 프로그래밍) 및 OOP(객체 지향 프로그래밍)

WBOY
WBOY원래의
2016-05-16 16:01:311246검색

우선 가슴에 손을 얹고 묵상해 보세요. 나는 삶과 사랑에 빠지고 있는 걸까요, 아니면 삶에 사로잡혀 있는 걸까요?

아직 답을 찾지 못했습니다. 다음 내용을 읽어보세요. 의미론적 관점에서 볼 때 동일한 것에 대한 다양한 표현은 다양한 사람들의 주관적인 관점을 반영할 수 있습니다. 철학적 관점에서 볼 때 세계관은 방법론에 영향을 미치며 때로는 완전히 모순되는 결론을 도출하기도 합니다. 실생활에서의 방법과 행동 강령은 더욱 그러하며, 다채로운 프로그래밍 언어에서는 더욱 그렇습니다. 프로그래밍 모델은 프로세스 지향, 객체 지향, 측면 지향 등 현실 세계의 다양한 시뮬레이션으로 가득 차 있습니다. 우리는 이미 Process-Oriented와 Object-Oriented에 매우 익숙할 것입니다. Aspect를 뜻하는 영어 단어는 Aspect입니다(때때로 번역하면 Aspect를 사용하는 것이 Aspect의 의미를 더 적절하게 표현할 수 있다고 생각합니다).

AOP 링크는 여기를 참조하세요.
http://en.wikipedia.org/wiki/Aspect-ori ... 프로그래밍

YUI3의 사용자 정의 이벤트는 AOP를 구현합니다
http://developer.yahoo.com/yui/3/event

슬라이스란 무엇인가요? 간단한 예를 들자면, 우리가 매일 출퇴근을 하고, 지하철을 타고, 버스를 타고, 여자친구와 데이트를 하고, PC방에서 게임을 하고, 영화관에 영화를 보러 가고… 하루에 많은 일, 모두가 객체입니다. 우리가 하는 모든 일은 이 객체의 메서드입니다. 예를 들어

甲.上班();<br>乙.坐地铁();<br>丙.看电影();


사실, 우리는 이를 다른 각도에서 볼 수 있습니다. 회사에서는 직원이 출근해야 하고, 철도 운송에서는 모든 사람이 이를 이용해야 하며, 영화관에서는 모든 사람에게 영화를 상영해야 합니다. 이는 다음과 같습니다.

公司.need(甲)<br>地铁.carry(乙);<br>电影院.放电影给(丙);


이런 관점에서 볼 때 개인 A, B, C는 객체일 뿐만 아니라 회사, 지하철, 영화관도 객체이다. 이러한 추상화는 전통적인 측면 지향적 측면이다. js 프로그래밍에서는 일반적으로 프로그램이 크지 않기 때문에 측면 수준 추상화가 필요한 지점에 도달하지 못할 수 있습니다. 그러나 이벤트 중심 원칙은 쉽게 AOP를 연상시킵니다. js의 이전 예는 다음과 같습니다.

someone.dosth();//OOPobject.fire('event',someone);//AOP

문맥을 벗어나 보면 위 코드는 여전히 의미론적으로 이해하기 어렵습니다. 단지 많은 js 프레임워크가 측면 프로그래밍의 가장자리 기능을 메소드로 캡슐화하여 사람들에게 많은 오해를 불러일으키는 것입니다. 이벤트 바인딩과 같은 것입니다. foo 함수 실행이 끝나면 foo를 수정하지 않고 myfoo를 실행하고 foo에 대한 모니터링을 추가합니다.

var foo = function(){
  //some code here
};

jQuery.aop.after(foo,function(){
  //added code here
});
jquery와 프로토타입 모두 이 간단한 함수 바인딩을 구현합니다.

jquery의 AOP가 여기에 있습니다. 그러나 yui3에서 AOP는 소스 코드의 모든 곳에서 볼 수 있는 사용자 정의 이벤트의 내부 메커니즘으로 승격됩니다. 이는 yui3의 코드 재사용 메커니즘을 이해하는 데 도움이 됩니다. yui3의 사용자 정의 이벤트가 매우 강력하고 유연하다는 것은 바로 이러한 추상화 덕분입니다. OOP와 비교할 때 AOP의 장점은 방해가 되지 않는 "장식"이지만 대부분의 경우 AOP를 사용하여 코드를 먼저 작성하는 것은 권장되지 않습니다. 예를 들어 보겠습니다. 모든 사람의 생활 습관은 매우 유사합니다. 학교에 가기, 학교에 가기, 여자를 데리러 가기, 게임하기 등 네 가지 행동을 예로 들 수 있습니다. 각 사건이 발생할 확률은 매우 정상입니다. B는 욕심쟁이이고, 놀기만 하는 아이는 PC방에 가서 게임만 하고, C는 공부를 좋아하고, 절대 게임을 안 하는 아이이다. 그는 학교에 갈 때면 항상 두 가지 일을 동시에 합니다. 방과 후에는 여자 아이를 데리러 오는 일과 게임을 하는 일입니다. 여기서는 div를 사용하여 각 사람을 나타내고 onmouseover를 사용하여 각 이벤트를 트리거합니다.

OOP 방식을 사용하면 프로그램 구조는 다음과 같아야 합니다.

코드는 여기에 있습니다:

yui_oop.htm

여기서 "이상한 사람들"이 "보통 사람들"로부터 상속을 받으면 코드 재작성을 통해 오버로드 목적을 달성하는데, 이는 명백히 비침해 원칙을 위반하는 것입니다. AOP의 아이디어를 살펴보겠습니다:

코드는 여기에 있습니다:

yui_aop.htm

여기에서는 이벤트 릴리스를 구체적으로 처리하는 데 사용되는 이벤트 릴리스 팩토리가 추상화되어 있습니다. 이에 의해 생성된 라이프 트랙 개체는 모든 사람을 모니터링하고 모든 사람의 다양한 행동을 캡처합니다. 공장에서는 "이상한 사람의 라이프 트랙"을 생성할 때 위에서 언급한 기능의 리스너 바인딩을 사용합니다. 이 바인딩은 비침습적이며 공장에서 잘 분리될 수 있습니다. 이 예에서 OOP와 AOP를 비교하면 둘의 복잡성은 비슷하지만 AOP는 더 넓은 아이디어를 갖고 있으며 코드가 더 유연합니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.