DCI について なべさんと意見交換した

ユーザーのメンタルモデルとコードを近づける案をあれこれ考えていたのをなべさんと会話してた。

案は2つ。CRCカードを改変して R2C(Role, Responsibility, Card)カードを使ったワーク(できればドメインエキスパートを交えて設計ワーク)で、対象ドメインの振る舞い分析の後で、ロールとデータのひもづけ確認-コードを書くというアプローチ。


もう一つ案。もっとプログラマーよりから既存コードのリファクタリングで、ユーザーのメンタルモデルに段階的に近づいて接近させる案があるのかなと話してた。


後者の方がプログラマー受けが良さそうで普及を狙えるのではないかの仮説

太ったモデルや曖昧すぎるコントローラーのリファクタリング方法でエンティティの分割やバリューオブジェクトやスタティックメソッドに切り出しや関数型の数学モデルに近づけるリファクタリングが向かない場合もあり、もっとヒューリスティックな人間臭い概念の領域を捉えるリファクタリングしたい場合があり、それがDCIがその道筋を提示しているのではないかと。

妄想会話をメモしておく。

リファクタリングからのDCI普及手順。

0. 太ったモデル、曖昧なコントローラーの発見。
1. 太ったモデル内のインスタンスメソッドをロール別にメソッドをモジュールで区分する。(データとロールの完全分離と動的紐づけはまだ。ロール名をキチン出す。ロールにひもづくメソッドを明確にする。)
2. データとロールの分離 (コンテキスト(場)をコントローラーなどから切り出すはまだ。コントローラーからロールとデータをひも付ける)
3.コントローラー or モデルから コンテキストの分離(コンテキストにキチンの名前づけ、ロールとデータのひもづけ、インタラクション記述をコンテキストに移動する)
4. ロール、コンテキストの記述を極限まで、DSL化する(外部DSLでもOK)
5. DSLで記述した内容が、ユーザやドメインエキスパートとの会話をファシリテートするか確認する

5がYesなら、ユーザーのメンタルモデルがコードにより近づいたと言えると思われる。

が、その前に、DCIが解こうとしている課題は本当に重要な課題なのか?解けたら本当にプログラマーやユーザーやドメインエキスパートはうれしい課題なのか先にテストが必要かもしれない。あとDCIの素振りも足りない。

その他のメモ

  • DCIでいうところの、あるコンテキストにおけるロール間のインタラクションをMockを使ってテストで明瞭にしたいと思わないだろうなぁ。設計ワークの方が向いていると思う。Mock以外のロール間のインタラクション向けの道具が発明される余地はあるかな?
  • ロールとデータの動的なひもづけの関係 1:1じゃなくて、1:多、多対多のニーズはあるのだろうか?