ジンジャー研究室

長めのつぶやき。難しいことは書きません。

権限の委譲と表現の自由度

難しい話ではないが、思考の整理のために書いてみる。


f:id:jinjor:20150327013947j:plain

図は、左の人が右の人に「この材料で何か喋って」と頼む様である。 下に行くほど右の人に大きな権限と表現の自由が与えられている。


f:id:jinjor:20150327014313j:plain

同じ挨拶でも「Hi」と言わせたい時は、権限の委譲が不十分だと左の人が面倒を見ることになる。


f:id:jinjor:20150327014726j:plain

逆にもっと丸投げしてみる。ユーザーIDだけ渡すから何とかしろ。 DBにアクセスしに行って、このユーザは現在英語で表示する設定にしているから名前は「Taro Yamada」が適切だろう。


f:id:jinjor:20150327015155j:plain

でもそれだと通信が沢山発生するのでキャッシュから取ってもらおう。


f:id:jinjor:20150327015254j:plain

いやもうむしろ全部お前に任せた。 必要なものはSessionスコープなりrequestスコープから全部取れ。


f:id:jinjor:20150327015658j:plain

そうなると必然的に任された方はアプリケーションについて十分な知識を持っている。 そうではなく、汎用的なユーティリティとして振舞う場合は細かくデータを渡す形式が向いている。


f:id:jinjor:20150327015854j:plain

React.jsみたいに、コンポーネントを組み立てるフレームワークが増えてきた。 図では、検索を行うために<TodoSearch>コンポーネントに上からオプションを渡している。


f:id:jinjor:20150327020116j:plain

<TodoSearch>コンポーネントの位置が変わって、上位のノードに変更が入ってしまった。


f:id:jinjor:20150327020224j:plain

これを防ぐひとつの解決策としては、contextのような何でもボックスを全てのコンポーネントに渡すようにする。


f:id:jinjor:20150327020308j:plain

もうひとつは、グローバルに何でもボックスを転がしておく。


f:id:jinjor:20150327020343j:plain

やはり、汎用的なコンポーネントとは区別する。


以上。