>PHP 프레임워크 >Laravel >Laravel에서 제어 역전의 이점은 무엇입니까?

Laravel에서 제어 역전의 이점은 무엇입니까?

WBOY
WBOY원래의
2022-06-08 11:15:402120검색

Laravel에서 제어 역전의 장점은 IOC 컨테이너를 사용하여 종속 모듈이나 객체를 분리할 수 있다는 것입니다. 지정된 서비스가 사용하기에 적합하지 않은 경우 개발자가 정의한 메서드를 수정하지 않고도 지정된 인터페이스를 사용할 수 있습니다. 교체할 적합한 서비스를 찾으세요.

Laravel에서 제어 역전의 이점은 무엇입니까?

이 기사의 운영 환경: Windows 10 시스템, Laravel 버전 6, Dell G3 컴퓨터.

Laravel 제어 역전의 이점은 무엇인가요?

laravel 자체는 서비스 컨테이너라고도 불리는 IOC 컨테이너입니다.

서비스 컨테이너는 클래스 종속성을 관리하고 종속성 주입을 수행하는 도구입니다.

제어 역전의 역할 종속 모듈이나 객체를 분리하기 위해 제3자를 사용하여 모듈 또는 객체 분리를 구현하는 것입니다. 이 제3자는 IOC 컨테이너입니다.

컨테이너는 개발자가 쉽게 호출할 수 있도록 필요한 서비스를 저장합니다. 따라서 이러한 서비스의 관리를 용이하게 하기 위해(디커플링 구현) Laravel은 이러한 서비스를 직접 호출하지 않기로 결정했습니다. 예를 들어 개발자는 원래 서비스 B에 바인딩되어 서비스 B를 통해 구현된 메서드 1을 정의했습니다. 는 더 이상 B가 아니지만 인터페이스 A가 정의되고 서비스 B가 인터페이스 A를 통해 구현됩니다.

이 과정에서 서비스 B는 개발자의 특정 기능을 제어할 수 있었습니다. 이제 개발자는 이 서비스를 직접 호출하지 않고 대신 인터페이스 A를 사용합니다. 따라서 서비스 B는 이 기능에 대한 제어를 상실하고 인터페이스 A가 이득을 얻습니다. 이 프로세스를 Inversion of Control

이라고 합니다. 장점은 :

서비스 B가 적합하지 않은 경우 인터페이스 A는 필요에 맞는 다른 서비스를 찾을 수 없습니다. 개발자의 방법을 수정할 필요가 없습니다. 1. 인터페이스 A에 사용하는 서비스의 경우 이 방법에 대해 걱정할 필요가 없습니다. 이 인터페이스 A가 서비스 B를 구현하려는 경우 서비스 B를 구현하는 클래스는 이 인터페이스 A를 상속하고 이 B 클래스에서 인터페이스 A에 의해 정의된 추상 메서드를 구현해야 합니다.

이 인터페이스 A는 이 서비스의 제공자로 간주될 수도 있습니다. laravel에는 여러 서비스 공급자가 있으며 해당 구성 요소를 형성합니다. 여러 구성 요소가 이러한 laravel 프레임워크를 형성합니다.

인터페이스 A가 있고 인터페이스 BCDE가 너무 많기 때문에 관리를 용이하게 하기 위해 서비스 공급자의 형식은 다음과 같아야 합니다. 규칙을 제한하기 위해 메서드 매개변수를 지정하는 이 개념을 계약

계약의 장점은 제한 규칙이 충족되는 한 필요에 따라 교체할 수 있다는 것입니다.

**Facades, **우리는 파사드(facade)라고 부를 수도 있지만 실제로는 개발자가 컨테이너에 바인딩된 다양한 서비스에 쉽게 액세스할 수 있도록 하는 정적 인터페이스 또는 프록시 집합입니다. Laravel에는 캐시 등과 같은 일부 Facade가 포함되어 있습니다. Facade는 컨테이너에서 객체에 액세스하는 데 사용할 수 있는 클래스입니다. 이 함수는 Facade 클래스에 정의되어 있습니다. Laravel의 Facade와 여러분이 직접 정의한 모든 Facade는 Facade 클래스를 상속합니다. 일반적으로 클래스 위에서 사용하는 xxxx는 모두 Facade입니다. 자세한 내용은 링크를 참조하세요: https://www.jianshu.com/p/a96715975d4e

그래서 제가 구현하고 싶은 서비스가 있다면 어떻게 해야 할까요? 여기에 없나요? 새 서비스를 등록하고 초기화해야 합니다. 컨테이너에 등록된 경우에만 이 작업이 서비스 제공자에 의해 구현됩니다. 주제로 돌아가서

종속성 주입이란 무엇입니까? 개발자의 메서드 1은 중개자 인터페이스 A를 정의합니다. 이 인터페이스 A는 메서드 1이 속한 클래스 1의 생성자에 매개 변수 형식으로 저장될 수 있습니다. 이 프로세스를 종속성이라고 합니다. 주입.

내부적으로 생성되지 않고(예: 초기화, 생성자 __construct의 팩토리 메서드를 통해 또는 수동으로 new) 매개변수나 다른 형식으로 외부에서 주입되는 한 종속성 주입에 속합니다

모직물 의존성 주입은 어떻게 하나요? 매우 간단합니다. $biller = new StripeBiller(new SmsNotifier);

이것은 종속성 주입입니다. 청구 클래스 StripeBiller는 사용자에게 알리는 방법을 고려할 필요가 없으며 알림 구현 클래스 SmsNotifier

의 인스턴스를 직접 전달합니다. 코드 관점에서 볼 때 이는 사소한 변경일 수 있지만 이 디자인 패턴을 도입하면 전체 애플리케이션 아키텍처가 확실히 새 것처럼 보일 것입니다. 클래스의 책임 경계가 명확하게 지정되므로 다양한 계층과 서비스 간의 통신이 구현됩니다. 디커플링을 사용하면 코드를 유지하기가 더 쉬워집니다. 또한 인터페이스 지향 프로그래밍의 관점에서 코드를 테스트하기가 더 쉬워집니다. 시뮬레이션을 통해 종속성을 주입하기만 하면 서로 다른 클래스 간의 테스트를 완전히 격리할 수 있습니다.

[관련 추천: laravel 비디오 튜토리얼]

위 내용은 Laravel에서 제어 역전의 이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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