코어 포인트
종속성 주입 (DI)을 사용하면 객체 생성 및 사용을 분리하여 유연한 의존성 관리가 가능합니다.
종속성 사출 컨테이너는 객체 종속성의 관리를 단순화합니다. 특히 종속성 수가 엄청날 때 객체 생성 및 구성을 자동화하여 구현됩니다.
주석 기반 DI 컨테이너 인 Disco는 및 - 와 같은 주석으로 구성을 단순화하여 서비스 설정을 단순화합니다.
Disco는 싱글 톤 인스턴스화, 지연로드 및 세션/요청 범위 관리와 같은 고급 기능을 지원하여 리소스 활용 및 서비스 수명주기를 최적화합니다. -
Disco의 Symfony 구성 요소와의 통합은 현대 웹 애플리케이션 개발에서 디스코의 호환성과 실용성을 보여주는 기본 HTTP 기반 프레임 워크를 만드는 데 도움이됩니다.
이 기사는 DISCO를 사용하여 DI 패턴을 구현하는 실질적인 예를 보여 주며 개발자가 효율적이고 확장 가능하며 관리하기 쉬운 웹 애플리케이션을 구축 할 수있는 토대를 마련했습니다. -
@Bean
의존성 주입의 핵심은 코드의 재사용 가능성에 있습니다. 객체 생성/구성을 사용에서 분리하여 고급 코드의 재사용 성을 향상 시키도록 설계된 설계 패턴입니다. @Configuration
-
다음 코드를 고려하십시오
보시다시피, 클래스 내부에서 PDO 객체를 만드는 대신 클래스 외부에서이를 생성하여 생성자를 통해 종속성으로 전달합니다. 이런 식으로, 우리는 클래스 내부에서 정의 된 드라이버를 사용하지 않고도 선택한 드라이버를 사용할 수 있습니다. -
Alejandro Gervasio와 Fabien Potencier는 Di의 개념에 대한 훌륭한 설명을 제공합니다.
그러나 그러나이 패턴에는 한 가지 단점이 있습니다. 종속성 수가 증가하면 종속 객체로 전달하기 전에 많은 객체를 생성/구성해야합니다. 결국 생성자에서 많은 보일러 플레이트 코드와 긴 매개 변수 대기열을 생성 할 수 있습니다. 현재 의존성 주입 컨테이너가 필요합니다! -
종속성 사출 컨테이너 (짧은 용기)는 서비스를 작성하고 종속성을 처리하는 방법을 알고있는 객체입니다.
이 기사에서는이 개념을 추가로 보여주기 위해 떠오르는 DI 컨테이너 인 Disco를 사용합니다.
의존성 주입 컨테이너에 대한 자세한 내용은이 주제에 대한 다른 기사를 참조하십시오.
프레임 워크는 DI 컨테이너를 배포하는 훌륭한 예이므로 Disco 및 일부 Symfony 구성 요소를 사용하여 기사 끝에 기본 HTTP 기반 프레임 워크를 작성합니다.
설치
디스코를 설치하려면 평소와 같이 작곡가를 사용합니다
코드를 테스트하기 위해 PHP의 내장 웹 서버를 사용합니다 : <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>class Test {
protected $dbh;
public function __construct(\PDO $dbh)
{
$this->dbh = $dbh;
}
}
$dbh = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$test = new Test($dbh);</pre><div class="contentsignin">로그인 후 복사</div></div>
<p> As a result, the application will be able to access the <a href="https://www.php.cn/link/7d7b04e989115e193107af57ad662dd2">https://www.php.cn/link/7d7b04e989115e193107af57ad662dd2</a> <code>-t
option defines the document root directory—index.php
directory where the 파일이 있습니다.
<🎜 🎜> <<> 초보자
디스코는 컨테이너와 상호 운용 가능한 DI 컨테이너입니다. 디스코는 주석에 기초한 DI 컨테이너입니다.
<<> <🎜 🎜> 패키지에는 컨테이너 객체의 특성을 표준화하기위한 인터페이스 세트가 포함되어 있습니다. 그것이 어떻게 작동하는지 이해하려면 를 기반으로하는 자체 itepoint 종속성 주입 컨테이너 구축에 대한 자습서를 참조하십시오.
<<>
컨테이너에 서비스를 추가하려면 구성 클래스를 만들어야합니다. 이 유형은 <<> 주석 마크 : <🎜 🎜>를 사용해야합니다
각 컨테이너 서비스는 구성 클래스에서 공개 또는 보호 된 방법으로 정의되어야합니다. 디스코는 각 서비스를 자바 문화에서 비롯된 콩이라고 부릅니다.
<,> 각 방법 내에서 서비스가 어떻게 생성되는지 정의합니다. 각 메소드에는 container-interop
(서비스임을 의미 함)로 표시되어야하며 리턴 객체의 유형에는 <🎜 🎜> 주석이 표시됩니다. container-interop
이것은 "Bean"을 포함하는 간단한 디스코 구성 클래스 예제입니다.
<🎜 🎜> <<> 주석은 서비스의 특성을 지정하기 위해 일부 구성 매개 변수를 허용합니다. 이 매개 변수는 서비스가 싱글 톤 객체 여부, 지연로드 (객체가 자원 집약적 인 경우) 또는 세션 수명 동안 상태를 유지 해야하는지 여부를 지정합니다.
<,> 기본적으로 모든 서비스는 싱글 톤 서비스로 정의됩니다.
예를 들어, 다음 콩은 싱글 톤 게으른 하중 서비스를 만듭니다.
@Configuration
Disco는 ProxyManager를 사용하여 서비스로드를 지연시킵니다. 또한 구성 클래스의 메소드에 추가 동작 (주석으로 정의)을 주입하는 데 사용합니다.
구성 클래스를 작성한 후 <🎜 🎜> 인스턴스를 생성하고 구성 클래스를 전달해야합니다. 이것은 우리의 컨테이너가 될 것입니다. composer require bitexpert/disco
로그인 후 복사
마지막으로 컨테이너를 : <🎜 🎜>에 등록합니다
컨테이너에서 서비스를 얻는 방법 <🎜 🎜 🎜 🎜 🎜>
Disco는 컨테이너/상호 운용성과 호환되므로 컨테이너 개체에서 <🎜 🎜> 및 메서드를 사용할 수 있습니다.
@Bean
@return
<<> (다음 내용은 원본 텍스트와 유사합니다. 공간을 유지하려면 일부 세부 사항은 여기에서 생략되지만 주요 정보와 구조는 유지됩니다) <🎜 🎜> <🎜 🎜>
<🎜 🎜> <<> 서비스 범위 <🎜 🎜>
<🎜 🎜> <<> 컨테이너 매개 변수 <🎜 🎜>
<<> 디스코의 실질적인 적용 <🎜 php -S localhost:8000 -t web
로그인 후 복사
@Bean
응답 리스너를 만듭니다
결론
이 기사는 원본 텍스트의 의사 원리 처리 만 처리했으며, 미묘한 조정과 컨텐츠를 다시 작성하여 원본 텍스트의 일반적인 의미를 바꾸지 않고 기사를 더 매끄럽고 자연스럽게 만들기 위해 노력했습니다. 이미지 형식과 위치는 변경되지 않습니다. 위 내용은 디자인 패턴이있는 디스코 : 의존성 주입에 대한 새로운 모습의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!