SEA関西プロセス分科会「ドメイン駆動設計」セミナーに参加した

少々遅くなったけど、先週の土曜日(2012/06/23)はSEA関西プロセス分科会主催の「ドメイン駆動設計」セミナーに参加してきたので、その感想を簡単にまとめてみた。

その中でここ数年、「ドメイン駆動設計」が注目を集めています。
顧客・分析者・設計開発者をつなぐ共通言語としての「ドメイン・モデル」を開発の基盤に据え、パターンやリファクタリングアジャイルプロセスなど近年の成果を統合した「ドメイン駆動設計」は、複雑さに挑み続けるソフトウェア開発の現場にとって大きな示唆を与えてくれるものと期待します。

6月23日 第47回 SEA関西プロセス分科会(大阪府)

講演はドメイン駆動設計を実践している増田亨氏。後半のディスカッションでは書籍「ドメイン駆動設計」の監訳者である今関剛氏も加わっていた。

今回の講演内容は、この、現場でのモデリング・設計支援経験、自分自身でのモデリング・試作作業から、いろいろ手に入れたものを盛り込もうと思う。
本の読み直しでも、けっこう、目から鱗ネタがあった。
自分では、いままでの勉強会等での発表とは違った、新しいステージの内容になりそうな予感がしている。ちょっとしたブレークスルー感覚。

ドメイン駆動設計:4つのアンチパターン | システム設計日記

以下、増田氏の講演メモより抜粋。

  • 書籍「ドメイン駆動設計」では、なぜドメインモデルを使うのか?という理由付けが行われていない。ドメインモデルを前提条件として話が進んでいる。
  • ドメインモデルは、利用者の関心事の模型であり、視覚化、構造化した用語集という位置付け。
  • クラス図はモデルの表現技術。チームメンバの標準語なので、クラス図に登場しない言葉が会話に出てくるのは良くない証拠。
  • 振る舞いの表現にはICONIXを使っている。ICONIXはドキュメントを絞ったライトなウォーターフォールモデルであって、決してアジャイル+ドキュメントではない。
  • ユーザの関心と実装コードを結びつける仲介役がドメインモデル。放っておくとバラバラに外れてしまうので、変化には絶えず追従する必要あり。
  • 独立性を保つアーキテクチャが重要。他の層がドメイン層に依存する形を保つことにこだわり続けなければならない。
  • 開発初日からドメインモデリングを開始して、毎日モデリングを続けている。
  • リアルな実世界は多対多の双方向な世界。複雑さと闘いつつ、如何にシンプルなモデルに持っていくかがポイント。
  • どのような要求でも、最後はコードで実現することが大切。ただし、いきなりコードを書くと混乱してしまうので、一旦モデルを描いて考えている。

xxx駆動開発という考え方は他にも色々有ってややこしいのだけど、今回のドメイン駆動設計では特に目新しい技法を持ち込むわけではなく、既存の開発の考えを上手く組み合わせて実戦に使っている印象を受けた。決して上流工程のみの話ではなく、要求を捉える所から始まってコードへ持ち込む一連の開発工程を網羅しており、その意味では開発手法の一つとして非常に親近感を覚えつつ話を理解できたように思う。

ドメイン駆動開発を成功させるには、対象を捉える考え方に重点を置きつつ、その実装を如何に効率的にこなすかがポイントらしい。会場からの質問でも出ていたけれど、開発対象を緻密に分析し、変化するところ・しないところを見極めて設計に持ち込むという考え方は、ソフトウェアプロダクトラインに近い印象を受けた。ドメイン駆動設計が顧客に向き合った開発を意図しているのに対し、プロダクトラインでは効率的なアウトプットに重点を置いているのが違いのように思える。

また、型宣言による表現力の向上や、コレクションを隠蔽しつつ扱う等、従来のオブジェクト指向を踏まえた上での実践的なテクニックが紹介されており、要求分析から設計、実装までの範囲を幅広く理解した開発者でなければ到達できないようなセンスの良さを感じることが出来た。そう言う意味で、ドメイン駆動設計自体はそれほど難しい概念でもないし、容易に実践できるように思うのだけど、開発者には高いレベルのスキルを要求するように思う。

ドメイン駆動設計の概要がよく分かったことだし、その考え方も自分の目指す方向に近い印象を受けたので、書籍の方も腰を落ち着けてもう一度じっくり読んでみようと思っている。様々な設計、開発手法を熟知している開発者なら、それらの知識を組み合わせて一段高いレベルの開発が出来るような気がしている。

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)