Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


apricot:usage:ja:model

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
apricot:usage:ja:model [2020/08/21 17:44]
y2sunlight
apricot:usage:ja:model [2020/09/03 13:45] (現在)
y2sunlight [Apricot モデルとサービス]
行 15: 行 15:
   * [[apricot:usage:ja:middleware|Apricot ミドルウェア]]   * [[apricot:usage:ja:middleware|Apricot ミドルウェア]]
   * [[apricot:usage:ja:controller|Apricot コントローラ]]   * [[apricot:usage:ja:controller|Apricot コントローラ]]
 +  * [[apricot:usage:ja:validation|Apricot バリデーション]]
   * [[apricot:usage:ja:provider|Apricot サービスプロバイダー]]   * [[apricot:usage:ja:provider|Apricot サービスプロバイダー]]
 +  * [[apricot:usage:ja:authentication|Apricot ユーザ認証]]
   * [[apricot:usage:ja:utility|Apricot ユーティリティ]]   * [[apricot:usage:ja:utility|Apricot ユーティリティ]]
  
行 22: 行 24:
 モデルはデータベース上のテーブルと1対1に対応したクラスで、データベースからデータを取得または設定するためのメソッドを持っています。モデルのベースクラスは[[https://github.com/j4mie/idiorm|Idiorm]]を使用して作成しています。 モデルはデータベース上のテーブルと1対1に対応したクラスで、データベースからデータを取得または設定するためのメソッドを持っています。モデルのベースクラスは[[https://github.com/j4mie/idiorm|Idiorm]]を使用して作成しています。
  
-Apricotは比較的小規模なアプリケーション開発をターゲットにしているので、コントローラとモデルによってアプリケーションの作成が可能であると仮定しています。しかしながら、2つ以上のモデルを操作するような少し複雑なトランザクションが必要な場合は、それをサービスとして実装する必要があるかもしれません。現状のApricotではサービスの実装はアプリケーションの問題であるとする立場でなので、ここではサービスの実装に関する若干のヒントを示すに留めます。+Apricotは比較的小規模なアプリケーション開発をターゲットにしているので、コントローラとモデルによってアプリケーションの作成が可能であると仮定しています。しかしながら、2つ以上のモデルを操作するような少し複雑なトランザクションが必要な場合は、それをサービスとして実装する必要があるかもしれません。現状のApricotではサービスの実装はアプリケーションの問題であるとする立場でなので、本章ではサービスの実装に関する若干のヒントを示すにだけに留めます。
  
 \\ \\
行 124: 行 126:
 </code> </code>
  
-新しいORMオブジェクトにはモデルのフィールドありません。モデルに初期値を設定するには以下のようにします。+上の例では、新しいORMオブジェクトにはモデルのフィールドありません。モデルに初期値を設定するには以下のようにします。
  
 <code php> <code php>
行 143: 行 145:
 === update() === === update() ===
  
-指定されたモデルデータでテーブルを更新します。このメソッドはORMオブジェクトを返します。レコードが存在しない時、''ApplicationException'' がスローされ、また、楽観的ロック例外を検知した時は、''OptimissticLockException'' がスローされます。これらの例外については [[apricot:usage:ja:errors-logging#アプリの例外クラス]] も参照して下さい。+指定されたモデルデータでテーブルを更新します。このメソッドはORMオブジェクトを返します。レコードが存在しない時、''ApplicationException'' がスローされ、また、楽観的ロック例外を検知した時は、''OptimissticLockException'' がスローされます。これらの例外については[[apricot:usage:ja:errors-logging#アプリの例外クラス]]も参照して下さい。
  
 <code php> <code php>
行 253: 行 255:
 ===== サービス ===== ===== サービス =====
  
-Apricotではサービスの実装に関する具体的で明確な指針を提供してはいませんが、1つの例題を提供しています。この例題は、''/your-project/app/Services'' に配置されています。+Apricotではサービスの実装に関する具体的で明確な指針を提供してはいませんが、その代わりに1つの例題を提供しています。この例題は、''/your-project/app/Services'' に配置されています。この配置場所は規則ではありませんので、必要に応じて変更して下さい
  
 {{fa>folder-open-o}} ** /your-project/app/Services ** {{fa>folder-open-o}} ** /your-project/app/Services **
行 289: 行 291:
 </code> </code>
  
 +サービスの構造は[[apricot:usage:ja:controller#コントローラ]]に似ています。クラス間の依存性を疎にする為に、コンストラクターでモデルや他のオブジェクトを受け取る場合、コンストラクタインジェクションが必要になるかもしれません。また、サービスがコントローラ、ミドルウェア、テンプレートなどの様々な場所から呼び出される場合は、シングルトンが要求されるかもしれません。
  
-サービスの配置場所+これらの問題を解決する為に、Apricotのコアが使用している [[https://github.com/thephpleague/container|League/Container]] が利用できます。これはサービスに関する強力なツールになるずです。
  
 +Apricotでは League/Container を利用した以下の機能が使用できます。
  
 +=== Auto Wiring ===
  
 +Auto Wiring とは、コンストラクター引数の型ヒントを調べることにより、オブジェクトとそのすべての依存関係を再帰的に自動的に解決する機能です。これによってコントローラーにモデルやサービスのコンストラクタインジェクションが実現できます。詳しくは「[[apricot:usage:ja:controller#auto_wiring]]」を参照して下さい。
  
 +=== サービスプロバイダー ===
  
-が、Apricotのコアが使用している [[https://github.com/thephpleague/container|League/Container]] はサービスに関する強力なツール提供するはずです。 +サービスプロバイダーを利用してサービスをシングトンとしてアプリケーションに登録することができます。詳しくは、「[[apricot:usage:ja:provider|League/Container]]を参照して下さい。
- +
- +
-これらのツーを利用してアプリケーション +
- +
- +
- +
-詳しくは [[apricot:usage:ja:controller#auto_wiring]] を参照して下さい。 +
- +
-ApricotではDIコンテナに [[https://github.com/thephpleague/container|League/Container]] を使用しています。 +
- +
- +
- +
  
 \\ \\
apricot/usage/ja/model.1597999466.txt.gz · 最終更新: 2020/08/21 17:44 by y2sunlight