2013年1月26日土曜日

自分の理解したDCI

去年の秋頃からDCIについて書き始めてるので、DCIとは何なのか自分なりの理解をまとめてみようと思う。例によって、いろんな人が書いたことをつまんでまとめてます。

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 件のコメント: