概要
「なりたい自分になる (Becoming the self you want to be)」 Be Frameworkとは、オブジェクトが自らの意思で、なりたい自分へと変容するためのフレームワークです。
マルセル・プルーストは言いました。
真の航海とは、新しい風景を探すことではなく、新しい目を持つことである。
—マルセル・プルースト『囚われの女』(À la recherche du temps perdu 第5巻)1923年
DoingからBeingへ
まず、これを見てください
// 従来のユーザー削除方法
$user = User::find($id);
$user->delete();
// 異なるユーザー削除方法
$activeUser = User::find($id);
$deletedUser = new DeletedUser($activeUser);
「DeletedUser」って何?と思いましたか?
実はこの疑問が、プログラミングの新しい世界への入り口です。これまで考えてもみなかった方法で、プログラミングを考えてみましょう。
『何をするか』から『何であるか』へ
従来のプログラミングはDOING(何をするか)に着目します:
$user->validate();
$user->save();
$user->notify();
BeフレームワークはBEING(何であるか)に着目します:
$rawData = new UserInput($_POST);
$validatedUser = new ValidatedUser($rawData);
$savedUser = new SavedUser($validatedUser);
前者はオブジェクトに対して「何をしろ」と指示します。 後者はオブジェクトが「どのような状態になるか」を表現します。
なぜこれが重要なのか
DOINGに着目すると:
- 実行前に「このアクションは可能か?」を毎回チェックする必要があります
- 様々なエラーケースに対処しなければなりません
- 不正な状態を防ぐための処理が常に必要です
BEINGに着目すると:
- 不正な状態のオブジェクトは最初から存在しません
- オブジェクトが存在すること自体が「正しい状態」の証明になります
- その時にできることだけに集中できます。できないことはそもそも実行できません
違いは型そのものにあります:
// 従来型:汎用的な型
function processUser(User $user) { }
// Beフレームワーク:特定の存在状態
function processUser(ValidatedUser $user) { }
function saveUser(SavedUser $user) { }
function archiveUser(DeletedUser $user) { }
各型はただのデータではなく、オブジェクトの特定の状態を表現しています。つまり、オブジェクトの時間的な変化が型で表されていて、その時に可能なことだけが行えます。例えば、存在しないオブジェクトに削除を命じることはできません。
なぜ「コントローラー」ではないのか? (Wu Wei / 無為自然)
従来のMVCフレームワークにおける「コントローラー (Controller)」は、その名の通り「制御・支配」を目的としています。 しかし、システムが複雑になるにつれて、この「全てを支配しようとするアプローチ」は困難になります。
コントローラーは全てのモデルやコンポーネントに無制限にアクセスできる「全能の自由」を持っていますが、制約がないということは、逆に言えばシステム内のあらゆる手続きについて、自分自身で制御し整合性を保つという「無限の責任」を負うことを意味します。
Be Frameworkは、東洋哲学の「無為自然 (Wu Wei)」の思想を取り入れた異なるアプローチを採ります。 操作が目的のデータをつくり出すのではなく、種子のような単純な入力オブジェクトが他のオブジェクトと出会い、自然に成長し、目的の最終オブジェクトへと「自ら変容(Metamorphosis)」していきます。
Commander (司令官) から Gardener (庭師) へ:
- 司令官は、部下(オブジェクト)に「動け」と命令します。しかし、複雑な自律的な動きを全て命令し続けることは不可能です。
- 庭師は、植物に命令しません。ただ、水や光という環境を整えるだけです。
植物は、自らの変容のみに関心を持ちます。他者を変えようとするのではなく、環境を受け入れて自らを自律的に変容(Metamorphosis)させ、在るべき姿に成ります。Beフレームワークも最初に入力を与えると、自らが最終オブジェクトになるような環境を整えます。制御を手放し、自律的な変容に委ねる。これがBe Frameworkのコアコンセプトです。
このマニュアルで学べること
以下の新しいプログラミング手法を身につけることができます:
- 「何をするか」ではなく「何であるか」を設計する
- 不正な状態をチェックするのではなく、最初から作れないようにする
- オブジェクトを無理に変更するのではなく、自然な変容(自己変容)を表現する
- エラーを防ぐのではなく、正しい状態を信頼する
さあ、始めましょう
基礎から学んでいきましょう。全ては入力クラスから始まります →
最初のオブジェクトを作りながら、なぜ『DeletedUser』なのかを体感してください。