DCIとはData, Context, and Interactionの略で、新しいアーキテクチャのこと。
「The DCI Architecture: A New Vision of Object-Oriented Programming」で最初に発表された。この日本語訳もあります。
読み物として面白かったのがtogetterでまとめられた「Jim Coplien 氏講演会「DCIアーキテクチャ」(2010年1月14日、早稲田大学)」。これは、すごいものに違いない、という感じがじわじわ来る。
MVCの問題を解決する
DCIが生まれた背景には、MVCモデルの問題点を解決するという視点がある。Data Context Interaction: What is it good for?
(DCIの要点が詰まっているプレゼンだと思います。)
よくMVCで問題になるのが
Fat Controller検索で一番最初に出たページが分かりやすい。ウェブ・Httpとのやり取り、ビューの管理、そしてビジネスロジックのコードまでまで入り込んでしまう。
そこで、モデル側にコードを移してゆくと、
今度は
Fat Model
#個人的には、モデルは小さくて堅牢なほうがいいので、同じ選ぶならFat Controllerかな。などと書いては見たが、実はMVCでコーディングあまりしたことがない…
DCIによる解決方法
原因は、モデルとコントローラだけではレイヤーが足りてない。ので、レイヤーを足しましょうというのがDCI。
Model + Controller
↓
Data + Context + Interaction + Controller
それぞれ、どんな意味や役割があるのか?
思想的背景は何なのか?
これが理解できると、よりよい(DCIな)コードが書けるはず。
Data, Context and Interaction
InteractionとContextを取り違えていたようだ。
気を取り直して、もう一度。
今の自分の理解を図にしてみた。
あれ、dataと書くつもりがentityと書いていた。
「entity」→「data」と脳内変換しつつ説明すると…
- Data(=entity):
俗にいうエンティティと言われるデータのオブジェクト。
データがどうあるべきかについての知識を蓄積したオブジェクト。
- Interaction:
データと外側の世界をつなぐのがinteraction。
要は「Dataに動的に付与したメソード」のことで、必要に応じてデータが何を行うかを実装する。多分、data+interactionでRoleと呼ぶ。Role自体はステートレスのオブジェクトで、例としてscalaの動的traitを使った実装例があげられいる。
- Context:
複数のエンティティにまたがる、ユースケース(ユーザー画面)由来の挙動、などを表現するオブジェクト。オブジェクト指向にとらわれず、システムの挙動を手続き的なコードで記述する。
変更の多いユーザー画面やたまにしか使わないメソードをentityオブジェクトの外に持って行けるので、変更に強いコードになるはず。
・Contextとは何なのか、
・Interaction/RoleのPHPでの実装方法と設計要求、
・結局どうウェブアプリを作るの?楽になるの?
あたりが今の興味になります。
0 件のコメント:
コメントを投稿