bekkou68 の日記

Gogengo! や IT 技術など。

DCI meetup に参加しました #dcimeetup

きっかけ

DCI という言葉をチラチラと聞いていたのですが、正体がつかめなくて気になっていたので DCI meetup に参加してきました。

お話しを聞いて

いろいろと自信がないですが、理解を自分の言葉にしてみました。ちゃんとわかっているわけではなく、断片的に何となくわかったような気になっているだけです。少しでもアウトプットしてみます。間違っている点などありましたらツッコミいただければと思います。
以下を書くにあたって、#dcimeetup の TL と『DCIアーキテクチャ - Trygve Reenskaug and James O. Coplien - Digital Romanticism』を参考にさせていただきました。ありがとうございます!

  • DCI は Data Context Intraction の略
  • DCI の目的はエンドユーザとコンピュータとのメンタルモデルを一致させること
  • DCI が実装されているとユースケースが一望できる。逆に、一つのユースケースMVC で実装すると、実装があちこちに散らばってしまう
  • ロールはコンテキストに応じてオブジェクトが持つ役割・位置づけのこと。一つのオブジェクトは複数のロールを持ちえる。あなたは家庭ではお兄さんだし、職場ではプログラマーだし、マラソン大会ではランナーであり、DCI meetup では聴講者である
  • Model, View, Controller もそれぞれロールと言える
  • コンテキストがオブジェクトにロールを割り当てる。ロールは、そのコンテキストに応じたものが割り当てられる。割り当てる処理はアトミック
  • 唯一の DCI言語は Marvin - Examples
  • DCI の世界では class は存在せず、context, role, object だけ(←だいぶ自信ないです)
  • インタラクションとは、ロールに応じたエンドユーザのアルゴリズム。ユーザの頭からコードへと写し取りたいと考えているもの
  • DCI の Ruby の例。ダイクストラの実装

疑問に思うことをいくつか

お話しを聞いてから1時間ほどたってやっと自分の中で消化し始めてきました。疑問に思うことがいくつか出てきたのでつらつらと書いていきます。

  • ユースケースの処理は、MVCそれぞれのロールにあたる重複が出てくるはず。それはどうやるとうまくまとまるのだろう。class がないとしたらどこに共通化するのだろうか。オブジェクトにまとめる…?
  • ウェブアプリを DCI で実装するとどんな感じになるのだろう

感想(2013/1/22 追記)

まだよくわかっていないわけですが、サービスづくりの新しいパラダイムだと感じました。サービスという世界で、ユーザの頭の中で描くオブジェクトのありのままのふるまいをコードに表しているという意味で自然な形なのかなと何となく思いました。
これから Rails界隈でどのような動きをしていくのかとても興味深いです。