Laravel 서비스 용기 의 장점 을 상세히 이해 하 다.
laravel 서비스 용 기 는 고도 로 자동 화 된 공장 과 같 습 니 다.필요 한 것 은 모델 을 맞 추고 특정한 인 터 페 이 스 를 사용 하여 만 듭 니 다.
서비스 용 기 를 사 용 했 기 때문에 laravel 의 대부분 대상 을 예화 하 는 방식 은 다음 과 같 습 니 다.
$obj1 = $container->make('class1', 'class2');
$obj2 = $container->make('class3', 'class4');
그러나 서비스 용 기 를 사용 하지 않 은 상태 에서 다음 과 같은 방식 으로 도 할 수 있다.
$obj1 = new class1(new class2());
$obj2 = new class3(new class4());
서비스 용 기 를 사용 하 는 장점다음 에 우 리 는 구체 적 인 예 를 통 해 그의 장점 을 분석한다.
이메일
우 리 는 메 일 을 보 내 는 기능 을 하나의 클래스 로 봉 하여 사용 해 야 할 때,발송 방법 을 실례 화하 고 호출한다.
다음은 laravel 서비스 용 기 를 사용 하지 않 고 흔히 볼 수 있 는 방식 입 니 다.
/**
*
*/
class EmailService{
public function send(){
//todo
}
}
//
$emailService = new EmailService();
$emailService->send();
laravel 서비스 용 기 를 사용 한 후:
$this->app->bind('emailService', function ($app) {
return new EmailService();
});
//
$emailService = app('emailService');
$emailService->send();
이 로 인해 우리 의 코드 는 더욱 간결 해 졌 고 중간 층 이 있 기 때문에 유연성 이 향상 되 었 다(디 결합).그러면 테스트(테스트 할 때 우 리 는 이메일 서비스 류 를 위조 하여 교체 할 수 있다)든 이메일 서비스 류 를 최적화 하 든 더욱 편리 해 졌 다.
//
$this->app->bind('emailService', function ($app) {
return new SupperEmailService();
});
다른 호출 된 부분 은 전혀 움 직 이지 않 습 니 다.만약 에 저희 가 이 바 인 딩 작업 이 없다 면 메 일 서 비 스 를 사용 하 는 모든 곳 에서 변경 해 야 합 니 다.
// EamilSerice
$emailService = new SupperEmailService();
$emailService->send();
예 2.단일 모델 실현또한 위의 예 입 니 다.성능 을 고려 하여 SupperEamilService 류 가 단일 모드 를 실현 해 야 합 니 다.따라서 laravel 서비스 용 기 를 사용 하지 않 은 상태 에서 SupperEmailService 류 를 다음 과 같이 변경 합 니 다.
class SupperEamilService{
//
static private $instance;
//
private function __construct(){
}
//
private function __clone(){
}
static public function getInstance(){
// $instance Uni
//
if (!self::$instance instanceof self) {
self::$instance = new self();
}
return self::$instance;
}
//
public function send(){
}
}
그 밖 에 현재 SupperEamilService 류 구조 함수 가 사유 이기 때문에 new 키 워드 를 통 해 대상 을 예화 할 수 없 기 때문에 모든 예화 SupperEmailService 류 의 곳 에서 다음 과 같이 변경 해 야 합 니 다.
$emailService=SupperEmailService::getInstance();
$emailService->send();
laravel 서비스 용 기 는 천성적으로 하나의 예 를 지원 합 니 다.다음은 laravel 의 실현 방식 입 니 다.
// bind singleton
$this->app->singleton('emailService', function ($app) {
return new SupperEmailService();
});
하나의 예 를 실현 하려 면 심지어 한 줄 의 코드 만 바 꾸 고 원래 의 bid 방법 을 singleton 으로 바 꾸 어야 합 니 다.용 기 를 통 해 꺼 낸 것 이 하나의 예 입 니 다.정말 편리 합 니 다.여행자
이 예 는 한 여행자 가 티베트 로 여행 을 간다 고 가정 하면 기차(train)를 타 거나 걸 어서 갈 수 있다.
laravel 서비스 용 기 를 사용 하지 않 음:
<?php
interface TrafficTool{
public function go();
}
class Train implements TrafficTool{
public function go(){
echo "train....";
}
}
class Leg implements TrafficTool{
public function go(){
echo "leg..";
}
}
class Traveller{
/**
* @var Leg|null|Train
*
*/
protected $_trafficTool;
public function __construct(TrafficTool $trafficTool){
$this->_trafficTool = $trafficTool;
}
public function visitTibet() {
$this->_trafficTool->go();
}
}
여행자 가 기 차 를 타고 여행 을 가 려 면 보통 우 리 는 이렇게 쓴다.
<?php
$train = new Train();
$tra = new Traveller($train);
$tra->visitTibet();
사실 이런 표기 법 은 이미 매우 좋다.왜냐하면 여행 도구 에 대한 의존 은 이미 인 터 페 이 스 를 통 해 외부 로 옮 겨 졌 기 때문이다.그러나 new 를 사용 하여 대상 을 예화 할 때 의존 이 생 긴 다.예 를 들 어 위의 trafficTool)은 우리 가 Traveller 를 만 들 기 전에$trafficTool,즉 Traveller 가 trafficTool 에 의존 해 야 한 다 는 것 을 의미한다.new 를 사용 하여 Traveller 와 trafficTool 사이 에 결합 이 생 겼 다.그러면 이 두 구성 요 소 는 분리 할 수 없다.이제 laravel 서비스 용 기 를 사용 하 는 것 이 어떻게 실현 되 는 지 살 펴 보 겠 습 니 다.
서비스 용기 에 클래스 바 인 딩
<?php
namespace App\Providers;
use Laravel\Lumen\Providers\EventServiceProvider as ServiceProvider;
class RepositoryServiceProvider extends ServiceProvider{
public function register(){
//
$this->app->bind( 'TrafficTool', 'Train');
$this->app->bind('Traveller', 'Traveller');
}
}
실례 화 대상
<?php
//
$tra = app()->make('Traveller');
$tra->visitTibet();
우리 가 서비스 용 기 를 사용 하여 여행 류 의 대상 을 가 져 올 때 용 기 는 대상 이 필요 로 하 는 인 자 를 자동 으로 주입 합 니 다.그 전에 저 는 특정한 유형 만 연결 하면 됩 니 다.이렇게 해 야 진정한 자동 화 를 나타 내 고 여행 류 와 여행 도구 류 를 완전히 결합 시 켰 습 니 다.우리 가 여행 방식 을 바 꿔 야 할 때,우 리 는 바 인 딩 만 바 꾸 면 된다.총결산
위 에 몇 가지 간단 한 예 를 들 어 laravel 서비스 용 기 를 완전히 이해 하고 파악 할 수 있다 면 실제 개발 에서 더 많은 편 의 를 제공 할 것 이다.물론 완벽 한 것 도 아니 지만,어쨌든 실제 사용 에서 장점 을 살 리 고 단점 을 피 하 는 것 이 관건 이다.
이상 은 Laravel 서비스 용기 의 장점 에 대한 상세 한 내용 입 니 다.Laravel 서비스 용기 의 장점 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
단순 Laravel+Vue.js에서 VueUI를 사용하여 로그인 및 등록Laravel에는 웹 팩과 같은 Laravel-Mix가 있는데, 이를 이용해서 Laravel에 Vue.js를 실현할 수 있다. 이번에는 몇 가지 명령을 통해 간단하게 VueUI로 로그인하여 로그인을 할 수 있습니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.