DDD / Part III Refactoring Toward Deeper Insight


DDD

Refactoring Toward Deeper Insignt

本書の第二部は Model-Driven Design の building blocks に関して論じた blah, blah

(中略、あとで書くかも)

最終的に以下の三点の結論に帰着する

  • 洗練されたドメインモデルは到達可能であるし、それは割に合う
  • 洗練されたドメインモデルは、イテレーティブなプロセスとリファクタリング、ドメイン専門家の積極的な参加、ドメインを学ぶことに積極的な開発者がそろわない限りめったに到達できない(★mjd!?)
  • 実装するにも使うにも洗練された設計スキルが必要

Levels of Refactoring (リファクタリングの水準)

リファクタリングは機能を保ったままで設計を変更することだ。前払いの念入りな設計を行う代わりに、開発者はコードの小さくかつ独立した変更により、振る舞いを保ったままで、設計を柔軟で理解しやすく変更していく。自動化されたテストがコードをいろいろ弄ってみる際の助けとなる(★relativelyは皮肉か?)。これにより、開発者は、はるか先を見通さなければというプレッシャーから解放される。

しかし、世に出ているリファクタリングの文章は、コードを読みやすくしたり拡張しやすくしたりする変更をどう行うかという手順の記述にフォーカスしてしまい、水準として詳細に過ぎる(細かすぎる)。 『Refactoring to Patterns』はもう少し高い水準を対象領域とし、開発者にデザインパターンに至るための道を示してくれるが、それでも設計の質の技術的側面に目が向いている。

システムの生存力(プロジェクトの継続性?)に大きく影響するリファクタリングとは、ドメインに対する新しい洞察からもたらされるリファクタリングや、モデルの有様をコードから明快に引き出してくれるリファクタリングだ。

そういったリファクタリングは、『Refactoring to Patterns』や『Refactorings』に出てくるような、常に行い続ける類のリファクタリングを置き換えるものではない。 既存のリファクタリングに対して異なる水準を新たに加える、refactoring to a deeper model (★) である。

ドメインの洞察に導かれるリファクタリングもしばしば小さなリファクタリングの組み合わせを伴うが、そのリファクタリングの動機はコードに対するものに限られず、より本質に近いモデルの洞察へと到る手堅い変更手段としてのリファクタリング、が動機付けとなる。

ゴールは、開発者はコードがどうなっているのかを知る、ということだけでなく、モデルが何故そういうモデルになっているのかを理解し、そのモデルをドメイン専門家との話し合いに関連づけることが出来るようになることだ。

『Refactorings』に出てくるカタログは、日頃出てくる小さなリファクタリングのほとんどを網羅する。各々のリファクタリングの動機は、「コードの臭い」だ。 対照的に、ドメインモデルの変更はドメインの理解が進むに従って非常に多様になるので、包括的なカタログを作ることは難しいだろう。

モデリングという行為は本質的に非定型で探索的である。そして、Refactoring to deeper insight は学習と深い考察に導かれる。

Chapter11 に書かれているように、世に出ている成功したモデルは参考になるかもしれないが、ドメインモデリングをクックブックやツールキットに落とし込むような横道にそれてはいけない(★)。

モデリングと設計は創造性を必要とする。

続く六つのチャプターでは、ドメインモデルを進化させ、設計に命を吹き込むための方法を記す。

(つづく)

担当者のつぶやき

  • まとめになっていません。力加減がわからないものですね。あとで整理します。
  • 最初に出てくる三つの結論のハードルの高さに DNBK
  • RtP の中では、Kerievsky は "refactoring to" と "refactoring toward" を明確に使い分けていますが、Eric Evans はどうなんだろう。部のタイトルは Toward で、でも本文には to も出てきたりします。

みんなの突っ込み

  • 「モデルが何故そういうモデルになっているのか(why it does what it does)」を表すコードというのがどんなものなのかが、あんまり想像できません。よく言われるIntention revealingな名前を付ける、とかはあくまで「what」だと思います。そもそも、コードで「why」まで表現できるもの? -- 佐藤? 2008-11-29 (土) 00:48:56
  • Deep Models、Deep Model/Supple Design、The Discovery Processの各セクションの要約は? -- 佐藤? 2008-11-29 (土) 00:51:00
  • (つづく) と書かれてからずいぶん経ってるので忘れてるかも.t-wada さんに期待できそうな気がしないので,佐藤さん「Deep Models」お願いできますか? 自分は「The Discovery Process」やります.和智さん見てたら「Deep Model/Supple Design」お願い. -- koichik? 2008-11-29 (土) 01:14:17
  • らじゃ! -- 和智? 2008-11-29 (土) 02:16:58
  • 佐藤さんから反応がないなぁ.和智さん「Deep Models」も頼めます? -- koichik? 2008-11-29 (土) 02:20:18
  • いえっさー>< -- 和智? 2008-11-29 (土) 02:25:47
  • さすが和智さん!! それでも和智さんなら...和智さんならきっと何とかしてくれる... -- koichik? 2008-11-29 (土) 02:30:10
  • すみません、その後すぐ寝ちゃいました・・・ -- 佐藤? 2008-11-29 (土) 10:56:25

まとめ (議事録)