>  기사  >  백엔드 개발  >  Laravel 리포지토리 패턴

Laravel 리포지토리 패턴

WBOY
WBOY원래의
2016-07-30 13:30:50930검색

저장소 패턴

코드를 깔끔하고 읽기 쉽게 유지하려면 Repository Pattern을 사용하는 것이 매우 유용합니다. 실제로 이 특정 디자인 패턴을 사용하기 위해 Laravel를 사용할 필요는 없습니다. 그러나 다음 시나리오에서는 OOP 프레임워크 Laravel를 사용하여 repositories를 사용하여 만드는 방법을 보여줍니다. Controller레이어는 덜 장황하고, 더 분리되어 있으며, 더 읽기 쉽습니다. 좀 더 자세히 살펴보겠습니다.

repositories

사용하지 마세요. 사실 Repositories을 사용할 필요는 없습니다. 하지만 시간이 지나면서 애플리케이션의 대부분의 작업을 완료할 수 있습니다. 예를 들어, Repositories을 사용하지 않으면 애플리케이션을 테스트하기가 매우 어려울 수 있습니다. (구현 교체) 구체적인 구현은 매우 복잡해집니다. 아래 예를 보세요.
HousesController.php

<?php
    class HousesController extends BaseController {
        public function index()
        {
            $houses = House::all();
            return View::make('houses.index',compact('houses'));
        }    
        
        public function create()
        {
            return View::make('houses.create');
        }
        public function show($id)
        {
            $house = House::find($id);
            return View::make('houses.show',compact('house'));
        }
    }

이것은 Eloquent을 사용하여 데이터베이스와 상호 작용하는 매우 일반적인 코드입니다. 이 코드는 정상적으로 작동하지만 controller 레이어는 Eloquent에 대해 긴밀하게 결합됩니다. 여기서는 repository을 삽입하여 분리된 버전의 코드를 생성할 수 있습니다. 이 분리된 코드 버전은 후속 프로그램의 특정 구현을 더 간단하게 만들 수 있습니다.

repositories

을 사용하면 실제로 repository 모드 전체를 완료하는 데 꽤 많은 단계가 필요하지만, 몇 번 완료하면 자연스럽게 습관이 될 것입니다. 아래 각 단계를 소개합니다.

1. Repository 폴더

만들기 먼저 app 폴더에 Repository 폴더 repositories를 만든 다음 폴더의 각 파일을 설정해야 합니다. 해당 네임스페이스.

2: 해당 Interface 클래스 생성

두 번째 단계는 다음과 같이 repository 클래스가 구현해야 하는 관련 메서드를 결정하는 해당 인터페이스를 생성하는 것입니다. 예를 들어, 네임스페이스를 추가해야 한다는 점을 다시 한번 강조합니다.
HouseRepositoryInterface.php

<?php namespace App\Repositories;

interface HouseRepositoryInterface {
    public function selectAll();
    
    public function find($id);
}

3: 해당 Repository 클래스 만들기

이제 작업을 수행할 repository 클래스를 만들 수 있습니다. us , 이 클래스 파일에는 아무리 복잡하더라도 대부분의 데이터베이스 쿼리를 넣을 수 있습니다. 다음 예시와 같이
DbHouseRepository.php

<?php namespace App\Repositories;

use House;

class DbHouseRepository implements HouseRepositoryInterface {
    
    public function selectAll()
    {
        return House::all();
    }

    public function find($id)
    {
        return House::find($id);
    }
}

<code><span><span> </span></span></code>

4: 백엔드 서비스 제공자 생성

먼저 소위 서비스 제공자, 참조 매뉴얼 서비스 제공자
BackendServiceProvider.php

<?php namespace App\Repositories;

use IlluminateSupportSeriveProvider;

class BackSerivePrivider extends ServiceProvider {

    public function register()
    {
        $this->app->bind('App\Repositories\HouseRepositoryInterface', 'App\Repositories\DbHouseRepository');
    }
}
<code><span><span> </span></span></code>

물론, 주로 당사의 provider 관련 파일.
위 코드에서 주로 말하는 것은 controller 레이어에서 HouseRepositoryInterface 유형 힌트를 사용할 때 DbHouseRepository를 사용할 것이라는 점입니다.

5: Providers Array
사실 위 코드에서는 이미 의존성 주입을 구현해 놓았는데, 여기서 사용하려면 수동으로 작성해야 하는데, 편의상 이

를 앱에 추가해야 합니다. / config/app.php의 providers  배열에서 끝에 providersAppRepositoriesBackendServiceProvider::class,

을 추가하세요. 6: 마지막으로 종속성 주입을 사용하여

controller

을 업데이트하세요. 위의 내용을 완료한 후 이전의 복잡한 데이터베이스 호출을 대체하려면 다음과 같이

에서 간단한 호출 방법만 필요합니다. Controller
HousesController.php

<?php 

use App\repositories\HouseRepositoryInterface;

class HousesController extends BaseController {

    public function __construct(HouseRepositoryInterface $house)
    {
        $this->house = $house;
    }


    public function index()
    {
        $houses = $this->house->selectAll();

        return View::make('houses.index', compact('houses'));
        
    }


    public function create()
    {
        return View::make('houses.create');
    }


    public function show($id)
    {
        $house = $this->house->find($id);
        
        return View::make('houses.show', compact('house'));

    }
}
이렇게 전체 모드 전환이 완료되었습니다

위에서는 Laravel Repository 모드에 대한 내용을 소개했으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

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