java-ja.dddで質問し損ねた事をt_wadaさんにがっつり聞いてみた

java-ja.dddの終了後、本編で時間が無くて質問できなかった事、Rails4で規約に組込まれたconcernという横断的関心事と、Rubyでのモジュールを活用した振舞いの分離が、ドメインモデルを考える上でどう関わってくるのか、という疑問について、t_wadaさんに質問してみた際のやり取り。 長丁場のイベントが終わった後に、しっかり返答してくれたt_wadaさんに感謝!
22
joker1007 (アルフォートおじさん) @joker1007

@t_wada さっき質問したかったけどできなかったのでメンションで質問しても良いですか?#java_ja

2013-03-22 23:02:07
joker1007 (アルフォートおじさん) @joker1007

@t_wada 質問したかったのは、Rails4で規約として取り込まれたconcernによる関心事の分離とドメインモデリングをどう捉えていくのがいいかという事と、Rubyのモジュールによる振る舞いの分離はドメインモデルと呼んでいいのかという事です。 #java_ja

2013-03-22 23:08:37
Takuto Wada @t_wada

@joker1007 質問はひとつずつにしてくれないかね JOJO …… (一度言ってみたかった台詞)

2013-03-22 23:20:22
joker1007 (アルフォートおじさん) @joker1007

@t_wada 失礼しました、シュトロハイム少佐ァッ!(のセリフで合ってたかなw

2013-03-22 23:25:26
joker1007 (アルフォートおじさん) @joker1007

@t_wada 非常にRails寄りの質問で申し訳ないですが・・・。

2013-03-22 23:09:41
Takuto Wada @t_wada

@joker1007 始めます。まず、状況依存の責務をどこに置くかという話と、ロジックを書くファイルを分離して共通化できるという話は、若干別のものですよね。

2013-03-22 23:25:04
Takuto Wada @t_wada

@joker1007 横断的関心事の置き場所を作り、それを規約としてレールに乗せたことは、一つ大きな前進と言えると思います。

2013-03-22 23:30:02
Takuto Wada @t_wada

@joker1007 DCI が問いかけたのは、状況によって責務や振る舞いが変わるドメインロジックの置き場所としてモデルは適切ではないのではないかということですよね。その実装方法としてモジュールが挙げられているので concern と似ていますが、意味合いは異なります。

2013-03-22 23:39:22
Takuto Wada @t_wada

@joker1007 concern への向き合い方として、1. 単純により DRY なコードを書くための規約として使う。 2. モデルにコアドメインに集中してもらうための仕組みとして意識的に使う。 が、あるのかなと思います。後者はドメインモデリングと関係がありますよね。

2013-03-22 23:48:54
Takuto Wada @t_wada

@joker1007 あ、後者の文脈では、 concern はどちらかというと脇役で、ドメインモデルのノイズ取りのような感じです。とは言え言葉に関しては全く同意です。

2013-03-22 23:55:26
Takuto Wada @t_wada

@joker1007 rails を使っていると気づくのは、 scope 名やもちろんメソッド名にドメインの言葉を使うことの収まりの良さ。これらをテストから導くときに、これもひとつのモデリングの形だなと感じます。

2013-03-22 23:58:35
Takuto Wada @t_wada

@joker1007 scope の設計って、集合にドメインの意味合いを持った名前をつけることですよね。だから、モデルには個に対する名前付けだけでなく、集合に対する名前付けも宣言的に行うことができる。集合の世界と名前の世界の橋渡しが違和感無くできるんです。これはすごい。

2013-03-23 00:02:24
joker1007 (アルフォートおじさん) @joker1007

今日のjava-ja.dddの登壇者の中でRailsの文脈に詳しい@t_wadaさんに今日聞いてて考えた事をメンションで質問したら、すげーがっつり答えてくれて嬉しい。 #java_ja

2013-03-23 00:00:18
joker1007 (アルフォートおじさん) @joker1007

@t_wada その辺はコントローラー側からデータアクセスを隠蔽して、ドメインの言葉でアクセスさせるためのルートが整備されている感じで、最近やっと集合へのアクセスとモデリングの言葉を共通に出来る事の関係が分かってきました。 #java_ja

2013-03-23 00:03:24
joker1007 (アルフォートおじさん) @joker1007

@t_wada 私は型への意識が余り表に出てこないRubyとARへの誘惑が強いRailsにおいてドメインモデルを考える上で、モジュールによるDRYさへの取り組みにもうちょっと意識的に名前を考えた方が良いのではないか、と考えていました。 #java_ja

2013-03-23 00:05:01
joker1007 (アルフォートおじさん) @joker1007

@t_wada ただconcernという横断的な関心事を扱う規約とモデリングとを混同しない方がいいのかもしれないと、和田さんの話を聞いていて思いました。 #java_ja

2013-03-23 00:06:31
Takuto Wada @t_wada

@joker1007 DRY に大きな価値を見出すということと、ドメインの言葉/構造を使うということは、直交してるんじゃないかなと思います。Rails にとって DRY は鉄の掟だから、より DRY に近づくレールが敷かれるのは自明。でも、それにさらに意味合いを見出すのも良いこと

2013-03-23 00:12:15
Takuto Wada @t_wada

@joker1007 だから、名前付けに意識的になることには、常に大賛成です。

2013-03-23 00:13:52
joker1007 (アルフォートおじさん) @joker1007

@t_wada コードベースを綺麗に保つのとは別のベクトルでドメインについて考えるための軸が存在してるという事ですね。とはいえ名前を付けられる余地があるのなら、そこに気を配った方が良い設計へのフィードバックが得られる。 #java_ja

2013-03-23 00:16:35
Takuto Wada @t_wada

@joker1007 ここからは、仮説の検証を行う段階なのではないかなと思います。 Rails4 になってドメインモデリングはどう変わったか、実際にやってみて、知見を持ち寄りましょう!

2013-03-23 00:17:27
joker1007 (アルフォートおじさん) @joker1007

@t_wada 私自身、まだ横断的関心事や振舞いの分離を上手くRailsに組込めるようなコードはまだまだ書けていないので、今日話していただいた事を基に知見を蓄積したいと思います。またお会いした時にRailsとDDDについて議論させてください!

2013-03-23 00:20:38
joker1007 (アルフォートおじさん) @joker1007

@t_wada そして、Twitterという話しづらい環境で、こんながっつり質問に答えてくれてありがとうございます!

2013-03-23 00:21:12