core
db
html
utility
Service
クラス概要
サービスクラスの位置付けはユーザー次第ですが、Curryでは基本的にはモデルの処理の取りまとめやトランザクション管理とメインロジック処理としての位置付けを推奨しています。これはつまりシステムのモデリング上のオブジェクトを表現するクラスと考えるとわかりやすくなります。
例えば通販サイトで売上情報の管理用テーブルとして売上ヘッダ情報テーブルと売上明細情報テーブルという2つのテーブルで構成されているとすると、モデルはそれぞれに対応させて作成し、「売上」という、モデリング上のオブジェクト単位はサービスで表現し、売上情報の登録はサービスクラスにメソッドを定義しますが、その中ではヘッダと明細という2つのテーブルのINSERTを行う、という具合です。
Serviceクラスを継承したサービスクラスは、その役割としての便利なメソッドが利用できます。
Serviceクラスでは独自に一つのデータベース接続インスタンスを保持しています。そしてmodelメソッドにより生成したモデルクラスのインスタンスは全てこの接続インスタンスを使用するため、トランザクション処理が容易に行えます。
基本的な構造としてはサービスクラスからはモデルクラスのメソッドを利用し、コントローラーからはサービスクラスのメソッドを利用するというようにするのが良いでしょう。
例えば通販サイトで売上情報の管理用テーブルとして売上ヘッダ情報テーブルと売上明細情報テーブルという2つのテーブルで構成されているとすると、モデルはそれぞれに対応させて作成し、「売上」という、モデリング上のオブジェクト単位はサービスで表現し、売上情報の登録はサービスクラスにメソッドを定義しますが、その中ではヘッダと明細という2つのテーブルのINSERTを行う、という具合です。
Serviceクラスを継承したサービスクラスは、その役割としての便利なメソッドが利用できます。
Serviceクラスでは独自に一つのデータベース接続インスタンスを保持しています。そしてmodelメソッドにより生成したモデルクラスのインスタンスは全てこの接続インスタンスを使用するため、トランザクション処理が容易に行えます。
基本的な構造としてはサービスクラスからはモデルクラスのメソッドを利用し、コントローラーからはサービスクラスのメソッドを利用するというようにするのが良いでしょう。
クラスファイル位置
curry/core/service.php
フィールド
| フィールド名 | アクセス | 型 | 概要 |
|---|---|---|---|
| $db | protected | PDO | PDOクラスインスタンス |
メソッド
| メソッド名 | アクセス | 概要 |
|---|---|---|
| model | public |
引数で指定されたクラス名のモデルクラスのインスタンスを取得します。 指定されたクラス名に対して、クラスファイル名に基づいた名前のクラスファイルが存在しない場合やクラス定義が存在しない場合は例外を発生します。 このメソッドはControllerクラスのmodelメソッドと全く同じ働きです。 |
| begin | protected | beginTransactionメソッドのエイリアスです。beginTransactionと全く同じ動作です。 |
| beginTransaction | protected | トランザクション処理を開始します。サービスクラスのmodelメソッドによって取得したモデルインスタンスは全て同一接続を利用しますので、トランザクションの対象となります。 |
| commit | protected | beginメソッドによって開始されたトランザクションのデータベース更新を確定し、終了します。 |
| rollback | protected | beginメソッドによって開始されたトランザクションのデータベースの更新を全て取り消し、元の状態に戻します。 |