Skip to content

Latest commit

 

History

History
288 lines (257 loc) · 10.6 KB

Resource_Sample.wiki

File metadata and controls

288 lines (257 loc) · 10.6 KB

  1. summary  リソースサンプル

Table of Contents

導入

アプリケーションリソースのユーザーリソースサンプルコードです。 このユーザーリソースでは、CRUD操作全てに対応していて、プロフィールリソースへのリンクも持ちます。リンクはリソース内でカプセル化されているのでリソースクライアントからはユーザーリソースとプロフィールリソースの関係を知る事なしに、リンクで2つのリソースが接続されています。

詳細

DBオブジェクトはURIとCRUDに基づいて親クラス`App_Ro.php`でインジェクトされます。ユーザーリソースのファイルであるApp/ro/User.phpではDBオブジェクトを取得するコードがありません。ここではDBアクセスにPEAR::MDB2を用いてますが、本来Roリソースは特定のデータベースオブジェクトに依存していません。

URIとメソッドに基づいてDBの接続先がとクエリーツールがインジェクトされています。DBのSQL操作を行うBEAR_Queryクエリーツールを使ったSELECTでは、外部からLIMITやDB Pagerの適用といった操作が行えます。クエリーを行うイベントハンドラメソッド(onRead等)では、DBの接続やテーブルの指定,ページャーオプションの指定等は行われていない事に注目してください。それらは全て対応した設定($config)で生成されたBEAR_Queryツールが行います。

またそのBEAR_Queryも、同じインターフェイスを実装した別オブジェクトにインジェクトができます。

リンク

ユーザーリソースはプロファイルリソース、フォローリソース(to, from)とリンクしています。ユーザーリソースを取得したページ内のクライアントはその中身を知らずに他のリソースの情報が取得できます。webのリンクの仕組みと同じです。

ページ内クライアントコード

複数のリンクもかけます

そこからのリンクは最後のリソースに対して行われます

DBページャー

通常のSELECT文がクライアントのコード変更なしでDBページャークエリーに変更できます。LIMITの指定もできます。

トランザクション

onUpdateではAOPを使ったトランザクションが適用されています。トランザクションはphpdoc部分に以下のように記述します。

ページからのオプション

画面一枚あたりのアイテム数等をリソースに依存させるのではなく、ページから伝えたいときがあります。その場合はページからのオプションreadの引数の`$params['option']`を以下のようにROで取得してクエリーツールを生成します。

返り値

返り値はoオブジェクトに変換されページに帰ります。ユーザー一覧$userを連想配列でreturnすると以下のようなRoオブジェクトとなりページに渡されます。

 * コード 200 (OK)
 * ヘッダー なし 
 * ボディ $user

UpdateとDeleteに@requiedアノテーションが指定されていて、アクセスするキーに`id`が無いとエラーリソースオブジェクト(Ro)がページに帰ります。

ソースコード

`App_Ro.php`

URIとCRUDメソッドに基づいてデータベース接続先を決定し接続したDBオブジェクトをインジェクトします。スケールアウトの時にクライアントコードを書きなす事なくDB接続先が変えられます。セレクトのときはDBページャー可能なクエリーツールを準備、更新系メソッドの時はSQL生成のモジュールを読み込んでいます。可能な限りの準備を集中して行い、それを元に各々のインジェクターでクエリーツールをインジェクトしているのでイベントハンドラ内のDB操作は極小化されていますが、SQL操作の自由は保持しています。

App/Ro/User.php

ユーザーリソースオブジェクト