FuelPHP拡張モジュール：【解説】ACCONのクラス図

## [ACCON](https://kurobuta.jp/books/book/manual/accon/ "ACCON")(Powered by FuelPHP)のクラス図の説明です。

## 1. クラス図（全体）

![クラス図](https://lh3.googleusercontent.com/jVFfBJmyv3fJX66T7_iQOIZBO_zT9eHHIELiKPGzAGc=w2732-h1930-no "クラス図")

[拡大](https://photos.google.com/share/AF1QipPv1-eH7ac7KWg3uk1PVhTN6GRyCTWgMfWTl2bW327s_n6GKRqIfpJbkea4LWeytg/photo/AF1QipPfEAduBP9uYh0V1RBZS8DQqBtqki4vNyEQpdfg?key=WXVGLUNpWXlIZ1l4c3ZwcmJOR2dUdGJia09BSEpR "ACCON Class図")

## 2. 制御：Foundation/Controllerパッケージ

![Controller](https://lh3.googleusercontent.com/vdufX-rI548MiETCz_gqe8MMo5brmvJ86LDHH0Tqy74=w2212-h1622-no "Controller")

コントローラは、リクエストを受け取りサービスを提供するクラス。コントローラは、モデルや他のクラスを制御し、出力用にビューにすべてを渡します。  
Foundation/Controllerパッケージでは、アクセス制御機能を保有し、そのリクエストの種類や処理の種別に応じて基礎となるコントローラを提供します。アプリケーション層では、そのサービスの種類によって適切なコントローラを選定し実装します。

 * Controller_Accon : 基板コントローラークラス。

    * Controller_Physical : 物理的に存在するコントローラーの基底クラス（通常）。

        * Controller_Physical_Crud : CRUD基礎の振る舞いを提供するクラス。

        * Controller_Physical_Nested :  再帰的な入れ子構造モデルの振る舞いを提供するクラス。

    * Controller_Kinetic : 動的に生成されるコントローラーの基底クラス。

        * Controller_Kinetic_Nested : 再帰的な入れ子構造のモデルの振る舞いを提供するクラス（Front用）。

* Controller_Accon_Rest : Restコントローラー。

## 3. 型（モデル）：Foundation/Modelパッケージ

![Model](https://lh3.googleusercontent.com/KAtV9omJW_CgDVYdMLZBk-hlVD2u6tt-o-0GiI7m2BQ=w2212-h1622-no "Model")

モデルはビジネスロジックとデータベース処理を行います。ORM(Object Relational Mapper)を使用しており、そのマッピング対象のテーブルの特性に合わせて次の二つが存在します。アプリケーション層では、その特性に合わせてクラスを選定し実装を行います。

* Model_Crud : 通常のレリーション構造のテーブルを使用するモデル。

* Model_Nested : 再帰的構造のテーブルを使用するモデル。

## 4. 認証（アクセス制御）：Foundation/Behavior/Authパッケージ

![Auth](https://lh3.googleusercontent.com/XEKBD10CEEG7qIkcG-YxgDnnjcZacegXDgPuyF6wD8s=w2212-h1622-no "Auth")

アクセス制御の認証を提供するクラス。下の二つのクラスが含まれており、アプリケーション層では、用途によって切り替え、拡張を行います。

* Behavior_Auth_Simple : 通常のログイン、ログアウト、状態の確認を提供するクラス。

* Behavior_Auth_None : スタブクラス。テスト時など、認証機能をOFFにしたい場合に使用。

クラスの切り替えは設定ファイルで行います。（設定ファイル：app/config/accon.php）

```php
/**
 * 認証
 */
'auth' => 'Accon\Foundation\Behavior_Auth_Simple',
//		'auth' => 'Accon\Foundation\Behavior_Auth_None',
```

## 5. 認可（アクセス制御）：Foundation/Behavior/ACLパッケージ

![Auth](https://lh3.googleusercontent.com/6vU5h65D114KX_kzhM98TEaj47mSQJp8i8rQMOMJ-q4=w2212-h1622-no "Auth")

アクセス制御の認可を提供するクラス。ユーザマスタ、グループマスタ、ロールマスタとそのアクセス制御リストからアクション単位に許可・拒否を判断します。

* Behavior_Acl_Physical : 物理的に存在するコントローラ用のアクセス制御。

* Behavior_Acl_Kinetic : 物理的に存在しないコントローラ用のアクセス制御。

* Behavior_Acl_Rest : Rest用のアクセス制御。

* Behavior_Acl_None : アクセス制御なし（スタブ）。

クラスの切り替えは設定ファイルで行います。（設定ファイル：app/config/accon.php）

```php
/**
 * 物理的に存在するコントローラー
 */
'physical' => array(
	/**
	 * 認可
	 */
	'acl' => 'Accon\Foundation\Behavior_Acl_Physical',
//			'acl' => 'Accon\Foundation\Behavior_Acl_None',
```

```php
/**
 * 動的に生成されるコントローラー
 */
'kinetic' => array(
	/**
	 * 認可
	 */
	'acl' => 'Accon\Foundation\Behavior_Acl_Kinetic',
//			'acl' => 'Accon\Foundation\Behavior_Acl_None',
```

```php
/**
 * レストコントローラー
 */
'rest' => array(
	/**
	 * 認可
	 */
	'acl' => 'Accon\Foundation\Behavior_Acl_Rest',
//			'acl' => 'Accon\Foundation\Behavior_Acl_None',
```

## 6. 画動（画面動作）：Foundation/Behavior/Viewパッケージ

![View](https://lh3.googleusercontent.com/LllfDgdIAWG70w_Y8A5hmUWkHsjFptsDHu9YvOrOhW0=w2212-h1622-no "View")

画面の動作が定義されたクラス。動作の種別毎にその標準的な振る舞いを提供します。その振る舞いは、コントローラーの種類別に設定ファイルで関連付けされており、変更・拡張時にはその設定を変更します。（設定ファイル：app/config/accon.php）

```php
/**
 * 画面生成
 */
'view' => array(
	'list'   => 'Accon\Foundation\Behavior_View_list_Crud',        // 一覧
	'single' => 'Accon\Foundation\Behavior_View_Single_Crud',      // 詳細
	'update' => 'Accon\Foundation\Behavior_View_Update_Crud',      // 更新
	'insert' => 'Accon\Foundation\Behavior_View_Insert_Crud',      // 追加
),
```

## 7. 操作：Foundation/Behavior/Operationパッケージ

![Operation](https://lh3.googleusercontent.com/2TepVtt-OulDtV5QEv8MwCeBslkW1pAuVakt1GnubS4=w2212-h1622-no "Operation")

モデルの操作が定義されたクラス。動作の種別毎にその標準的な振る舞いを提供します。その振る舞いは、コントローラーの種類別に設定ファイルで関連付けされており、変更・拡張時にはその設定を変更します。（設定ファイル：app/config/accon.php）

```php
'crud' => array(
	/**
	 * モデル操作
	 */
	'operation' => array(
		'insert' => 'Accon\Foundation\Behavior_Operation_Insert_Crud', // 追加
		'update' => 'Accon\Foundation\Behavior_Operation_Update_Crud', // 更新
		'remove' => 'Accon\Foundation\Behavior_Operation_Remove_Crud', // 削除
	),
```

## 8. 他

![他](https://lh3.googleusercontent.com/rHS4yMcHdTjr-gx3pvQgmNjOAYRbkBzWcGbKL6drAoU=w2212-h1622-no "他")

* View : 画面部品を使用する際、アプリケーション層、ファンデーション層の順位で検索を行う。アプリケーション層に該当の部品が存在しない場合はファンデーション層の部品を利用する。

* Log : 通常のログ以外に、操作ログとして、「いつ・だれが・どこから・なにを・どうした」を出力する。また、ログファイル以外にブラウザのコンソールにログを出力することが可能。（設定ファイル：app/config/accon.php）

```php
/**
 * オペレーションログ出力設定
 * 		true： 出力
 * 		false: 出力しない
 */
'operation_log'  => true,

/**
 * ブラウザコンソールログ出力設定
 * 		true： 出力
 * 		false: 出力しない
 */
 'browser_console'  => true,
```

## 9. 管制（アクセス制御管理機能のコントローラー）：Controllerパッケージ

![Controller](https://lh3.googleusercontent.com/bUyGMyUPF4_Gc8rw_GsvRI6kchWCmqJwaZN0BW45te4=w2212-h1622-no "Controller")

アクセス制御機能の管理画面用のコントローラ。

## 10. 管型（アクセス制御管理機能のモデル）：Modelパッケージ

![Model](https://lh3.googleusercontent.com/ZRS_iwaLj3TpN-r_O92gj7Sow7Zbq53NZ6qh_PDCWTg=w2212-h1622-no "Model")

アクセス制御機能の管理画面用のモデル。