1.0 alpha

# BEAR.Sunday 1.0 alpha

BEAR.Sunday 1.0の概要を変更点を中心に紹介します。主にこれまでの`0.x`がある程度理解されている方を対象にかいています。

## はじめに
以下の２つのコンセプトに注力するために、量的なものを大胆に削っています。

 * HTTPアプリケーションのためのアーキテクチャ
 * アプリケーション制約を提供する

（まずは1.0リリースのために一旦捨てて、必要があれば別パッケージとして復活させていく方針にします。例えばデバック関連はBEAR.DevPackageの一部としてリリースします。）

## 概要

### Package versions

セマンティックバージョニングです。
メジャーバージョンはそれぞれ上がり、BCブレイクが存在します。

Ray.Di `2.0`
Ray.Aop `2.0`
BEAR.Resource `1.0`
BEAR.Sunday `1.0`
BEAR.Package `1.0`
BEAR.Skeleton `1.0`

`1.0`がリリースされたらBCブレイクなしで継続するつもりでいます。（`2.0`は無い予定です）

### Framework Extension

フレームワークの機能拡張を４つにしぼりました。アプリケーション、ルーター、リプレゼンテーション、トランスファーの４つです。それぞれ、**構成**、**入力**、**表現**、**出力**に対応します。

つまりDIとAOPでアプリケーションを構成して(App)、リソースのリクエストを受け取り(Router)、アプリケーション状態を変更してその表現を求め（Representation）、レスポンスとして出力（Transfer)します。

REST (Representational State Transfer)をそのままフレームワークとして拡張ポイント


* [Application](https://github.com/koriym/BEAR.Sunday/tree/develop-2/src/Extension/Application)
* [Router](https://github.com/koriym/BEAR.Sunday/tree/develop-2/src/Extension/Router)
* [Representation](https://github.com/koriym/BEAR.Sunday/tree/develop-2/src/Extension/Representation)
* [Transfer](https://github.com/koriym/BEAR.Sunday/tree/develop-2/src/Extension/Transfer)

### Context Module

コンテキストに応じてアプリケーションの振舞いは変わります。

 * Hal
 * Api
 * Cli
 * Prod

https://github.com/koriym/BEAR.Package/tree/develop-2/src/Context

### Plugin Module 

コンテキストによらないアプリケーションの拡張機能です。現在はAuraルーターと [HAL](http://stateless.co/hal_specification.html) 関連のみがあります。

 * Web Router
 * Aura Router
 * Router Collection
 * Hal Render / Transger

https://github.com/koriym/BEAR.Package/tree/develop-2/src/Module

### Application

アプリケーションのメタ情報はそれぞれの定数(tmp_dir)などではなく、１つのオブジェクトにまとめられました。同様に各種の設定値は文字列として扱われるのではなくて、オブジェクトのプロパティとして扱われることが望まれます。

アプリケーションブートストラップは基本的にはコンテキストによらず同一です。

スケルトンはよりシンプルになりました。同時に複数のアプリケーションが機能します。

 * Application meta info - [AppMeta](https://github.com/koriym/BEAR.Package/blob/develop-2/src/AbstractAppMeta.php)
 * Application factory [Bootstrap](https://github.com/koriym/BEAR.Package/blob/develop-2/src/Bootstrap.php)
 * Application skeleton [BEAR.Skeleton](https://github.com/koriym/BEAR.Skeleton)
 * Application bootstrap script [bootstrap.php](https://github.com/koriym/BEAR.Skeleton/blob/develop-2/bootstrap/bootstrap.php)

## 主な変更点

### Ray.Aop
 * [MOD] カスタムMatcher
 * [ADD] namespaceの継承
 * [MOD] 速度、安定性
 
### Ray.Di

 * [MOD] インターセプターのバインドがオブジェクトではなくクラス名に。束縛順を気にする必要がなくなりました。
 * [DEL] AbstractModule::requestInjection();
 * [DEL] DI logger
 * [DEL] DI compiler

### BEAR.Resource

 * [DEL] シグナルパラメーター
 * [DEL] httpアダプター(guzzle)
 * [DEL] sync request

### BEAR.Sunday

 * [MOD] アノテーション、Extention、Provideの整理
 * [DEL] Aura WebContext

### BEAR.Package

 * [DEL] Devツール
 * [DEL] DB, Form, Sessionなどのライブラリ
 * [DEL] HTMl出力
 * [DEL] デモアプリ
 * [DEL] アプリケーションリフレクター
 * [ADD] コンテキストによるアプリケーションのデコレーション


### 検討点

 * `AppMeta` - 名前はこれでよいか？ (AppPropertiesやAppConfigはどうか）
 * `bootsrap.php` - 名前はこれでよいか？ (app_scriptやrun.phpはどうか）
 * 最低限のHTMLコンテキストを含めるべきではないか？
  * そうならTwig ? Aura.View ? moustache ?
 * 最低限のDAOを含めるべきではないか？
  * そうならDoctrine Dbal ? Aura.Sql ? 
 * アプリケーションレイアウトはこれでよいか？
 * `定数`ファイルを完全に外してよいか？
 * `0.x`にあった`script/instance.php`ファイルは要らないか？
 * アプリケーションスケルトンの`tests`の内容

### 最後に

この記事はgithubに[issue #159](https://github.com/koriym/BEAR.Package/issues/159)として上げました。