PHPリポジトリ

WBOY
WBOYオリジナル
2024-08-29 12:35:30589ブラウズ

一般的に、リポジトリはデータ ソースの操作を処理する責任があります。リポジトリは、データベース関連の操作を一元管理する方法を提供し、コードの可読性を高め、例外が発生した場合の追跡を容易にします。また、コードをドメイン層から分離するのにも役立ちます。これは、ドメインとデータベース操作を分離するインターフェイス、コンポーネント、またはクラスです。このトピックでは、PHP リポジトリについて学習します。

広告 このカテゴリーの人気コース PHP 開発者 - 専門分野 | 8コースシリーズ | 3 つの模擬テスト

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

構文

この内部で、データベースからのデータの取得、更新、削除を担当する、より同一のデータベース操作を定義できます。これをどのように定義するかは以下を参照してください;

interface name_oF_interface
{
// logic goes here. Can define the methods which are needed to haled the db operations
}

上記の構文では、さまざまなメソッドを含む 1 つのインターフェイスを定義しています。このインターフェイス キーワードの後に​​は、指定するインターフェイスの名前が続きます。構文をよりよく理解するために、練習構文を 1 つ見てみましょう。以下を参照してください。

interface DemoInteface
{
public function cerate(Object $obj);
public function delete($id);
public function update(Object $obj);
//many more methods we can define here.
// but we need to provide their implementation as well in the class which is using this repo.
}

上記の構文では、データベース操作用の新しいメソッドを定義し、それらの実装をさまざまなクラスで提供します。

PHP ではリポジトリはどのように機能しますか?

現時点では、データベース操作を処理するためにリポジトリが使用されることがわかっています。したがって、他の言語と同様に、データ層とドメイン オブジェクトの間のレイヤーとして機能すると言えます。データ操作を一元管理できるため、非常に多くのメリットが得られます。また、リポジトリはエンティティを扱うのにも役立ちます。これらのエンティティを取得してドメイン オブジェクトにロードできます。これらのエンティティも変更できます。

リポジトリを使用して実行される基本的な操作は次のとおりです。

1.データベースからエンティティをフェッチしてメモリに保存することも、エンティティ オブジェクトを直接変更しないことが常に推奨されるため、より適切に変更するためにそれらのエンティティ オブジェクトをドメイン オブジェクトに変換することもできます。

2.データベースからフェッチした後、リポジトリのみを使用して、それらのオブジェクトを更新し、データベースに保存するために送信できます。このプロセス全体はトランザクションを使用して実行できます。データベースの対話中に例外が発生した場合は、トランザクション全体をロールバックできます。

3.すべての例外は永続層でのみ発生するため、例外を簡単に処理できます。

リポジトリ パターンを使用する場合、多くのレイヤーがあり、それらは非常に適切に処理されます。たとえば、次のようなさまざまなレイヤーがあります:

  • プレゼンテーション層
  • サービス層
  • ビジネス層
  • データアクセス層

ここで、いくつかのクラスとリポジトリをそれらに従って定義し、それらが実際にどのように機能するかを理解するための 1 つの例を取り上げます。また、以下を参照して、リポジトリのフローを確認します。

ここでオブジェクトを作成する必要があるとします。1 つは購入者、もう 1 つは注文です。この注文には、購入者のデータと、配送先の住所、注文名などのその他の情報が含まれます。したがって、これを以下のように 3 つのレイヤーに分割します。

1.ドメイン層: 利用可能なすべてのクラスのドメイン オブジェクトを作成します。この例では、Buyer an Order クラスです。これらのクラスは両方とも、リポジトリ パターンのドメイン層に分類されます。これらのオブジェクトを使用してデータベースからのデータを保持します。

2.永続層: この永続層はリポジトリと言えます。このレベルでは、リポジトリを作成するだけで、再びデータベースと対話します。ただし、このために、購入者と注文の間の操作を処理するために必要なすべてのメソッドを含むインターフェイスを作成します。この層は例外を追跡するのにも役立ち、例外は永続化層のみに分類されます。

クラス:

購入者クラス

class Buyer
{
public $id;
public $gender;
public $email;
public $firstName;
public $lastName;
}

オーダークラス

class Order
{
public $id;
public $order_name;
public $order_description;
public $amount;
public $quantity;
public $buyerid;
}

リポジトリ:

inteface OrderRepo {
// we can define our methods here according to requirement.
}

上記のロジックからわかるように、さまざまなレイヤーを扱っていることがわかります。これは、PHP でのリポジトリ パターンの仕組みです。他の言語とよく似ています。

PHP リポジトリの例

この例では、さまざまなメソッドを呼び出すための 1 つのリポジトリを作成しています。ただし、現時点では、ここでは db を使用していません。したがって、Repository のメソッドを呼び出した後にメッセージを出力するだけです。

従業員クラス:

class Employee
{
public $id;
public $emp_first_name;
public $emp_last_name;
public $gender;
public $email;
public $city;
}
interface EmployeeRepo {
public function findById($id);
public function create(Employee $emp);
public function delete(Employee $emp);
public function update(Employee $emp);
}

Repository implementations for the employee :

class SQLEmployeeRepo implements EmployeeRepo
{
public function create(Employee $emp)
{
print("saving employee data here !!");
}
public function findById($id)
{
print("finding employee data here !!");
}
public function delete(Employee $emp)
{
print("deleting employee data here !!");
}
public function update(Employee $emp)
{
print("updating employee data here !!");
}
}

Employee Controller class:

class EmployeeControllerDemo
{
public function create(EmployeeRepo $repo)
{
$emp = new Employee;
$user->emp_first_name = $_POST['emp_first_name'];
$user->emp_last_name = $_POST['emp_last_name'];
$user->city = $_POST['city'];
$repo->create($user);
// here we are creating emp object and calling creae method.
}
}

Output :

PHPリポジトリ

Conclusion

The repository makes our code centralized, more readable, maintainable, and easy to understand. By using the repository, we can easily track the exception and errors if they occurred at the repository level while interacting with the database. It also helps us to decouple our code with less dependency on each other. It acts as a thin layer between the db and persistence layer; some called it part of persistence only.

以上がPHPリポジトリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。