저장소 패턴
코드를 깔끔하고 읽기 쉽게 유지하려면 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
모드 전체를 완료하는 데 꽤 많은 단계가 필요하지만, 몇 번 완료하면 자연스럽게 습관이 될 것입니다. 아래 각 단계를 소개합니다.
Repository
폴더 만들기 먼저 app
폴더에 Repository
폴더 repositories
를 만든 다음 폴더의 각 파일을 설정해야 합니다. 해당 네임스페이스.
Interface
클래스 생성 두 번째 단계는 다음과 같이 repository
클래스가 구현해야 하는 관련 메서드를 결정하는 해당 인터페이스를 생성하는 것입니다. 예를 들어, 네임스페이스를 추가해야 한다는 점을 다시 한번 강조합니다. HouseRepositoryInterface.php
<?php namespace App\Repositories; interface HouseRepositoryInterface { public function selectAll(); public function find($id); }
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>
먼저 소위 서비스 제공자, 참조 매뉴얼 서비스 제공자 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
를 사용할 것이라는 점입니다.
Providers Array
를 앱에 추가해야 합니다. / config/app.php의 providers
배열에서 끝에 providers
AppRepositoriesBackendServiceProvider::class,
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 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.