>백엔드 개발 >PHP 튜토리얼 >PHP 마스터 | 통제의 역전 - 할리우드 원리

PHP 마스터 | 통제의 역전 - 할리우드 원리

Joseph Gordon-Levitt
Joseph Gordon-Levitt원래의
2025-02-25 20:56:12354검색

PHP Master | Inversion of Control - The Hollywood Principle

코어 포인트

    제어 역전 (IOC)의 개념은 의존성 주입 (DI)보다 더 광범위하며, 이는 IOC를 활용하는 IOC의 특정 응용 사례 일뿐입니다. DI는 클래스 디자인을 주도하여 주변 환경에서 제공하는 외부 공동 작업자를 채택합니다.
  • 할리우드 원칙으로도 알려진 IOC는 확장 가능하고 분리 된 프로그램 모듈을 개발하는 데 큰 도움이 될 수 있습니다. 외부 환경이 필요한 모든 논리를 구현하여 모듈의 구현을 단순화 할 수 있습니다.
  • 옵저버 모드는 IOC의 전형적인 예입니다. 이는 매우 분리 된 신체가 주변 환경에 영향을 미치지 않고 특정 작업을 수행 할 수있게하는 반면, 외부 관찰자는 신체가 트리거 된 이벤트를 처리하는 데 필요한 논리를 구현합니다.
  • IOC는 단순하고 강력한 프로그래밍 방법으로 구성 요소를 테스트에서 쉽게 분리 할 수있는 분리 된 직교 시스템을 생성합니다. 클래스 종속성 관리에만 국한되지 않지만 이벤트 중심 디자인에서도 효과적으로 사용할 수 있습니다.
  • 많은 프로그래머 (나 자신이 포함되어 있습니다. 이것이 제가 공개적으로 Mea culpa )입니다. 제어의 반전 (IOC)은 의존성 주입 (DI)의 동의어라고 생각합니다. 이 아이디어에 대한 다소 직관적 인 이유가 있습니다. DI의 목적이 수업 설계를 촉진하여 외부 공동 작업자가 주변 환경에 의해 차례로 찾기보다는 제공되는 경우이 프로세스는 효과적으로 다음과 같은 것으로 간주 될 수 있습니다. IOC 양식. 그러나 방정식 DI = IOC는 일반적으로 유효하지만 역전 자체를 제어하는 ​​개념은 실제로 훨씬 더 넓습니다. 실제로, DI는 IOC를 이용하는 특정 사용 사례라고 할 수 있지만 유일한 사용은 아닙니다. 이것은 우리를 출발점으로 되돌려줍니다. DI가 IOC의 장점에 의존하는 모델이라면 IOC는 무엇입니까? 전통적으로 응용 프로그램 구성 요소는 실행 환경을 작동하고 제어하도록 설계 되었으며이 접근법은 어느 정도 잘 작동합니다. 예를 들어, 로깅 모듈은 데이터를 파일로 녹화하기 위해 구현 될 수 있으며, 데이터를 기록하는 방법과시기가 모듈에 의해 완전히 제어됩니다. 로그 파일 (이 경우 환경의 일부)은 모듈 작동 방식에 영향을 미치지 않는 외부의 수동 요소 일뿐입니다. 그러나 모듈의 기능을 확장하고 데이터를 데이터베이스에 추가로 로그하거나 결국 이메일을 통해 추가로 로그인 할 수 있어야한다고 가정합니다. 추가 기능을 노출시키기 위해 모듈을 업그레이드하면 복잡성이 높아지고 이러한 추가 작업을 처리하는 데 필요한 논리가 동일한 API 뒤에 포장되어 점점 더 부풀어 오릅니다. 이 접근법은 작동하지만 전혀 확장 할 수는 없습니다. 이 상황은 상당히 간단한 방식으로 해결 될 수 있습니다. 모듈에 데이터를 여러 엔드 포인트에 로그 로그인 할 책임이있는 대신 책임을 외부 환경으로 직접 전환 할 수 있습니다. 모듈의 구현은 매우 간단하게 유지되고 간단한 이벤트 스케줄러 역할을하는 것으로 제한됩니다. 반면에, 환경은 데이터를 해당 모듈과 완전히 독립적 인 엔드 포인트로 기록하는 데 필요한 모든 논리를 구현할 책임이 있습니다. 놀랍게도, 구성 요소와 환경 사이의 이러한 책임을 바꾸는 과정은 공식적으로 제어 역전 (또는 더 쉬운 용어, 할리우드 원칙)이라고하며 확장 가능하고 고도로 분리 된 프로그램 모듈을 개발할 때 구현은 실질적인 개선이 될 수 있습니다.물론 IOC는 언어 독립적 패러다임이므로 PHP 세계에서 쉽게 사용할 수 있습니다.

제어 반전 구현 - 필드의 대상을 관찰하십시오 IOC는 실제로 어디에나 있으므로 생산 구현을 쉽게 찾을 수 있습니다. 최초의 사용 사례는 의존성 주입이지만, 특히 이벤트 중심 디자인 분야에는 다른 많은 대표적인 사용 사례가 있습니다. 이벤트 처리 메커니즘과 함께 IOC가 어떤 병렬 유니버스가 작동하는지 알고 싶다면 GOF 라이브러리의 고전적인 사례를 고려하십시오 : 관찰자 패턴. 관찰자는 JavaScript를 통해 클라이언트 쪽에서도 거의 모든 곳에서 사용되며, IOC 개념의 두드러진 예입니다. 주제에 의해 트리거 된 이벤트를 처리하는 데 필요한 논리를 구현합니다. 이벤트 또는 새로운 사건을 다루는 방법은 전적으로 주제의 책임이 아니라 관찰자의 책임입니다. 예를 들어 이전의 긴 진술을 명확하게하는 좋은 방법 일 수 있습니다. 따라서 블로그 게시물과 댓글 사이의 일대일 관계를 정의하는 원시 도메인 모델을 구현했다고 가정합니다. 이 경우, 우리는 의도적으로 야심을 갖고 새로운 주석이 게시물에 추가 될 때 시스템 관리자에게 알리는 이메일을 보내도록 할 수 있습니다. 솔직히, IOC에 의지하지 않고 이러한 기능을 구현하는 것은 실제로 도메인 객체에 그 범위를 넘어서 무언가를하도록 요청할 것이기 때문에 실제로 엉망이 될 것입니다. 대신, 우리는 IOC 기반 접근 방식을 취하고 다음 도메인 클래스를 정의 할 수 있습니다. (코드 예제는 여기에서 생략됩니다. 내용 의이 부분은 질문에 필요한 의사 원리와 관련이없고 너무 길기 때문에 생략됩니다.) 외부 환경에 대한 신뢰 통제 - 의견 알림 서비스 실현 블로그 게시물에 새 댓글을 추가 할 때 이메일 알림을 트리거하는 관찰자 서비스 구축은 관련 메소드를 구현하는 클래스를 정의하는 데 단순화되는 간단한 프로세스입니다. (코드 예제는 위와 같은 이유로 여기에서 생략됩니다.)

요약

Control 역전은 종종 PHP에서 모호한 개념으로 간주됩니다. 많은 개발자들이 그것을 일반 의존성 주입과 연관시키는 경향이 있지만, 올바르게 구현되면 단순하고 강력한 프로그램 방법입니다. 성분을 테스트에서 쉽게 분리 할 수있는 분리 된 직교 시스템. 응용 프로그램에서 종속성 주입을 사용하는 경우 (실제로 사용하고 있는가?), 당신은 당신이 이미 반전이 제공하는 이점을 활용하고 있기 때문에 프로그래머 본능이 잘 만족한다고 생각해야합니다. 그러나 이전에 보여 주려고했듯이 올바른 방식으로 클래스 종속성을 관리하는 것 외에이 접근법에 맞는 많은 상황이 있습니다. 이벤트 중심 디자인은 물론 좋은 예입니다.

(FAQ 부분은 위와 같은 이유가 여기에서 생략됩니다.)

위 내용은 PHP 마스터 | 통제의 역전 - 할리우드 원리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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