programing

'데코레이터'란 무엇이며 어떻게 사용됩니까?

megabox 2023. 3. 20. 21:46
반응형

'데코레이터'란 무엇이며 어떻게 사용됩니까?

Angular JS에는 정확히 어떤 장식가가 있는지 궁금합니다.온라인에는 장식가들이 앵귤러에서 수다를 떨기 위해 필요한 정보가 많지 않습니다.JS 문서유튜브 비디오에서 간략하게(재미있지만) 언급.

Angular guys의 표현대로 데코레이터는 다음과 같습니다.

서비스 데코레이션: 데코레이터가 서비스인스턴스 작성을 대행 수신할 수 있습니다.반환되는 인스턴스는 원래 인스턴스일 수도 있고 원래 인스턴스에 위임되는 새 인스턴스일 수도 있습니다.

그게 무슨 뜻인지도 잘 모르겠고, 왜 이 논리를 서비스 자체와 분리시키려 하는지 모르겠어요.예를 들어, 다른 조건에서 다른 것을 반환하고 싶다면, 관련된 함수에 다른 인수를 전달하거나, 그 프라이빗 상태를 공유하는 다른 함수를 사용합니다.

난 아직 앵귤러야JS noob 그래서 나는 내가 단지 무지하거나 나쁜 습관을 들였다고 확신한다.

의 좋은 활용 사례$provide.decorator는 서비스를 그대로 유지하면서 모듈이 의존하고 있는 서드파티 또는 서드파티 서비스에 대해 사소한 '삭제'를 실행할 필요가 있는 경우입니다(서비스 소유자 또는 서드파티 서비스가 아니기 때문에).여기 plunkr에 대한 시연입니다.

데코레이터를 사용하면 교차 우려 사항을 분리하여 "인프라스트럭처" 코드에 대한 걱정 없이 단일 책임 원칙을 유지할 수 있습니다.

데코레이터의 실용성:

  • 캐싱: 고가의 HTTP 콜을 발신할 가능성이 있는 서비스가 있는 경우, 외부 콜을 발신하기 전에 로컬 스토리지를 체크하는 캐싱 데코레이터로 서비스를 랩할 수 있습니다.
  • 디버깅/트레이싱: 디버깅 또는 트레이스 래퍼로 서비스를 장식하는 스위치가 개발/실동 구성에 따라 달라집니다.
  • [Throttling] : 자주 트리거되는 콜을 디버깅랩퍼로 랩합니다.예를 들어, 요금제한 서비스와 쉽게 상호 작용할 수 있습니다.

이러한 경우 모두 서비스 내 코드를 주요 책임으로 제한합니다.

decorator에 의해 작성된 서비스인스턴스를 대행 수신할 수 있습니다.factory, service, value, provider및 일부 변경 옵션을 제공합니다.instance(service)옵션으로는 설정할 수 없습니다.

또한 테스트 목적으로 목업 인스턴스를 제공할 수 있습니다.$http.

한마디로 연장법이라고 할 수 있습니다.Ex의 경우클래스가 있고 두 가지 메서드가 있으며 실행 시 메서드를 추가하고 싶을 때 데코레이터를 사용합니다.

$provide.decorator는 정수와 함께 사용할 수 없습니다.이는 읽기 전용 속성을 가중시키는 정수를 변경할 수 없기 때문입니다.

간단히 말하면 데코레이터는 다음과 같이 설명할 수 있습니다.

데코레이터 함수는 서비스 생성을 가로채기 때문에 서비스의 동작을 덮어쓰거나 변경할 수 있습니다.

, 이렇게 요.$provide 또는 합니다.

$provide.decorator('service to decorate',['$delegate', function($delegate) {
  // $delegate - The original service instance, 
  //             which can be replaced, monkey patched, 
  //             configured, decorated or delegated to. 
  //             ie here what is there in the 'service to decorate'

  //   This function will be invoked, 
  //   when the service needs to be provided 
  //   and should return the decorated service instance.
  return $delegate;
}]);

예:

$provide.decorator('$log', ['$delegate', function($delegate) {
  // This will change implementation of log.war to log.error
  $delegate.warn = $delegate.error; 
  return $delegate;
}]);

적용들

@JBland에 대한 답변입니다.

  • 응용 프로그램 전체 로케일 설정:-

    여기서 예를 찾을 수 있습니다.

  • 앵귤러 서비스에 의한 서비스의 디폴트 동작 및 기존 실장 변경:-

    예시는 이쪽에서 보실 수 있습니다.

  • 다른 환경에서 함수의 스위칭 동작.

언급URL : https://stackoverflow.com/questions/16075982/what-are-decorators-and-how-are-they-used

반응형