Laravelリポジトリパターン
リポジトリ パターン
コードをクリーンで読みやすい状態に保つために、リポジトリ パターン
を使用すると非常に便利です。実際、この特別なデザイン パターンを使用するためだけに Laravel
を使用する必要はありません。ただし、次のシナリオでは、OOP
フレームワーク Laravel を使用します。
では、リポジトリ
を使用して Controller
レイヤーの冗長性を減らし、より分離し、読みやすくする方法を示します。詳しく見てみましょう。 Repository Pattern
是非常有用的。事实上,我们也不必仅仅为了使用这个特别的设计模式去使用Laravel
,然而在下面的场景下,我们将使用OOP
的框架Laravel
去展示如何使用repositories
使我们的Controller
层不再那么啰嗦、更加解耦和易读。下面让我们更深入的研究一下。
不使用 repositories
其实使用Repositories
并不是必要的,在你的应用中你完全可以不使用这个设计模式的前提下完成绝大多数的事情,然而随着时间的推移你可能把自己陷入一个死角,比如不选择使用Repositories
会使你的应用测试很不容易,(swapping out implementations)具体的实现将会变的很复杂,下面我们看一个例子。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
类 来给我们干活了,在这个类文件中我们可以把我们的绝大多数的数据库查询都放进去,不论多么复杂。如下面的例子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
其实在上面的代码中,我们已经实现了一个依赖注入,但如果我们要使用在此我们是需要手动去写的,为了更为方面,我们需要增加这个providers
到app/config/app.php 中的 providers
数组里面,只需要在最后加上AppRepositoriesBackendServiceProvider::class,
6:最后使用依赖注入更新你的controller
当我们完成上面的那些内容之后,我们在Controller
只需要简单的调用方法代替之前的复杂的数据库调用,如下面内容:HousesController.php
リポジトリ
を使用しないでください実際、アプリケーションでは、このデザイン パターンを使用せずにほとんどのタスクを完了できます。ただし、時間が経つと、たとえば、Repositories
を使用しないと、アプリケーションのテスト (実装の交換) が非常に困難になる可能性があります。具体的な実装は変わります。非常に複雑なので、以下の例を見てみましょう。 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')); } }
Eloquent
を使用してデータベースと対話する非常に典型的なコードです。ただし、controller レイヤーは Eloquent
と密接に結合されます。ここで、リポジトリ
を挿入して、コードの分離バージョンを作成できます。この分離バージョンのコードにより、後続のプログラムの特定の実装が簡素化されます。
repositories
の使用🎜🎜実際、repository
モード全体を完了するにはかなりの手順が必要ですが、数回完了すると、自然に習慣化しましょう 各ステップについて詳しく説明します。 🎜1. Repository
フォルダーを作成します
🎜 まず、app
内に独自の Repository
フォルダー を作成する必要があります。フォルダー >repositories
に移動し、フォルダー内の各ファイルに対応する名前空間を設定する必要があります。 🎜2: 対応する Interface
クラスを作成します
🎜 2 番目のステップは、repository
クラスがメソッドを実装する必要があるものを決定する、対応するインターフェースを作成することです。次の例に示すように、名前空間を追加する必要があることを再度強調します。 HouseRepositoryInterface.php
🎜🎜rrreee🎜3: 対応する Repository
クラスを作成します
🎜これで、リポジトリ クラスがその作業を行ってくれます。このクラス ファイルには、どんなに複雑であっても、ほとんどのデータベース クエリを入れることができます。次の例のように<br><code>DbHouseRepository.php
🎜🎜rrreee🎜rrreee4: バックエンド サービス プロバイダーを作成します
🎜まず、いわゆるサービス プロバイダーについては、マニュアルのサービス プロバイダーを参照してください。BackendServiceProvider.php
🎜🎜rrreee🎜rrreee🎜 もちろん、主に provider を保存する新しいフォルダーを作成することもできます。コード>関連ファイル。 <br>上記のコードが主に示していることは、<code>controller
レイヤーでタイプ ヒント HouseRepositoryInterface
を使用する場合、 DbHouseRepository
を使用することがわかっているということです。 > .🎜5: Providers Array
を更新します🎜実際、上記のコードでは依存関係の注入を実装しましたが、ここで使用したい場合は、次のことを行う必要があります。手動で行う より便利に記述するには、この providers
を app/config/app.php の providers
配列に追加する必要があります。 を追加するだけです。 >AppRepositoriesBackendServiceProvider::class,
🎜6: 最後に、依存関係の注入を使用して コントローラー
を更新します🎜上記の内容を完了したら、 コントローラー は、以下に示すように、前の複雑なデータベース呼び出しの代わりにメソッドを呼び出すだけで済みます。HousesController.php
🎜🎜rrreee🎜🎜 このように、モデル変換全体が完了しました 🎜
🎜
以上、Laravel リポジトリ モードをその側面も含めて紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。 🎜
🎜
🎜

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











ファンクションとは、関数を意味します。これは、特定の関数を備えた再利用可能なコード ブロックです。プログラムの基本コンポーネントの 1 つです。入力パラメータを受け取り、特定の操作を実行し、結果を返すことができます。その目的は、再利用可能なコード ブロックをカプセル化することです。コードの再利用性と保守性を向上させるコード。

毎年、Apple が iOS と macOS の新しいメジャー バージョンをリリースする前に、ユーザーは数か月前にベータ版をダウンロードして最初に体験することができます。同ソフトウェアは一般ユーザーと開発者の両方が使用するため、Appleは開発者向けベータ版のパブリックベータ版である開発者版とパブリック版を両方向けに開始した。 iOS の開発者バージョンとパブリック バージョンの違いは何ですか?文字通りに言うと、開発者バージョンは開発者テスト バージョンであり、パブリック バージョンは公開テスト バージョンです。開発者バージョンとパブリック バージョンは、異なるユーザーを対象としています。開発者バージョンは、Apple が開発者によるテストのために使用します。ダウンロードしてアップグレードするには、Apple 開発者アカウントが必要です。

MySQL.proc テーブルの役割と機能の詳細な説明。MySQL は人気のあるリレーショナル データベース管理システムです。開発者が MySQL を使用する場合、多くの場合、ストアド プロシージャ (StoredProcedure) の作成と管理が必要になります。 MySQL.proc テーブルは非常に重要なシステム テーブルであり、ストアド プロシージャの名前、定義、パラメータなど、データベース内のすべてのストアド プロシージャに関連する情報が保存されます。この記事では、MySQL.proc テーブルの役割と機能について詳しく説明します。

この記事では、Python の enumerate() 関数と「enumerate()」関数の目的について学びます。 enumerate() 関数とは何ですか? Python の enumerate() 関数は、データ コレクションをパラメータとして受け取り、列挙オブジェクトを返します。列挙オブジェクトはキーと値のペアとして返されます。キーは各項目に対応するインデックス、値は項目です。構文 enumerate(iterable,start) パラメータ iterable - 渡されたデータ コレクションは、iterablestart と呼ばれる列挙オブジェクトとして返すことができます。 - 名前が示すように、列挙オブジェクトの開始インデックスは start によって定義されます。無視したら

Vue の使い方と機能.use Function Vue は、多くの便利な機能を提供する人気のフロントエンド フレームワークです。その 1 つは Vue.use 関数で、これを使用すると Vue アプリケーションでプラグインを使用できるようになります。この記事では、Vue.use 関数の使い方と機能を紹介し、いくつかのコード例を示します。 Vue.use 関数の基本的な使用法は非常に簡単です。Vue がインスタンス化される前に関数を呼び出し、使用するプラグインをパラメータとして渡すだけです。簡単な例を次に示します。 // プラグインの導入と使用

file_exists メソッドは、ファイルまたはディレクトリが存在するかどうかを確認します。チェックするファイルまたはディレクトリのパスを引数として受け取ります。これは、ファイルを処理する前に存在するかどうかを知る必要がある場合に役立ちます。これにより、新しいファイルを作成するときに、この関数を使用してファイルがすでに存在するかどうかを確認できます。構文 file_exists($file_path) パラメータ file_path - 存在をチェックするファイルまたはディレクトリのパスを設定します。必須。 return file_exists() メソッドが戻ります。ファイルまたはディレクトリが存在する場合は TrueFalse を返し、ファイルまたはディレクトリが存在しない場合は TrueFalse を返します。 例として、「candidate.txt」ファイルのチェックを見てみましょう。

js関数関数の使い方は、1. 関数の宣言、2. 関数の呼び出し、3. 関数のパラメータ、4. 関数の戻り値、5. 無名関数、6. パラメータとしての関数、7. 関数のスコープ、8. 再帰関数です。

インターネットの発展に伴い、SOA (サービス指向アーキテクチャ) は、今日のエンタープライズ レベルのシステムにおける重要な技術アーキテクチャになりました。 SOA アーキテクチャのサービスは再利用、再編成、拡張が可能であると同時に、システム開発とメンテナンスのプロセスも簡素化されます。広く使用されている Web プログラミング言語として、PHP は SOA を実装するための関数ライブラリもいくつか提供しています。次に、PHP で SOA 関数を使用する方法を詳しく説明します。 1. SOA の基本概念 SOA は分散システム開発の考え方とアーキテクチャです。
