「オブジェクト設計エクササイズ -チームモデリングで学ぶドメイン駆動設計-」に参加しました
10月5日(土)にLearning Community Factory主催で開催された「オブジェクト設計エクササイズ -チームモデリングで学ぶドメイン駆動設計-」に参加しました。
講師は増田亨さん(@masuda220)です。これまでに第1回(オブジェクト設計エクササイズ -コードで覚えるオブジェクト設計-)、第2回(オブジェクト設計エクササイズ -モデルとコードで学ぶ責任駆動設計-)と開催されたオブジェクト設計エクササイズシリーズの3回目ということでした。私はこの回が初めての参加でした。
内容と感想
最初に増田さんからドメイン駆動設計についての基本的な考え方を簡単に説明いただいた後、モデリングのお題が発表され、そのお題のドメインモデリングを行うといったものでした。4名〜6名、ほぼその場で初めて出会う人がチームになって、おそらく普段の業務とは違うドメインのモデルを話し合って作っていくのですが、メンバーのバックグラウンドもバラバラ、ドメイン駆動設計についての理解もバラバラです。このようなチームメンバーでドメインモデリングができるのでしょうか?
お題は「ホテルの料金プランを見て、ドメインモデリングせよ」というもので、ズバリ「ホテル千畳敷」さんの料金プランページが渡されました。アプリケーション要件は固定されたものがあるわけではなく、いろいろなアプリケーションに使えるドメインモデルを作れ、という指示でした。この指示について、私は良いなと感じましたが実際にチームでは多少の混乱があったのも事実です。というのも、「アプリケーションを想定してはいけない(ユースケースを考えてはいけない)」と受け取ったメンバーがいたためです。ドメインモデルはアプリケーションから独立した、1段抽象レベルの高いものとして作るための指示であって、実際にモデリングするには具体的なアプリケーションとまではいかなくても、何らかのユースケースは想定しないとモデリングが深まりません。私が参加したチームでは最終的には、予約をしたい場合の料金を計算できることを目標にすえることで、モデリングを進めることができました。
参考になったこと
- 早い段階で「モデルを説明する」
DDDではユビキタス言語を使ってシナリオを上手く言葉にできるかどうかが重要で、これによってユビキタス言語から漏れている概念がないか、検証することができます。この時点で、モデルにあらわれていない言葉が口頭説明で補足されていたりするのは、概念が抽出できていない証拠ということでした。 - 「コーディングできるモデルか」を基準にする
これも、メンバーの受け取り方をコントロールする必要がある(メンバーによってはデータベースのことなどに意識がいってしまう)と感じましたが、オブジェクト指向/DDDとしてはやはり重要な観点だと思いました。コードに落としこむイメージを持たずにモデリング/設計だけを進めるのはほぼタブーで、常に(ドメインレイヤーの)コードとリンクさせる意識を持っておくことは、あるべきモデルに向かうための近道でもあると感じました。 - 「業務の価値を概念化する」
今回のホテルの料金プランをチームでモデリングした成果として、1年の中のある期間を「繁忙期」それ以外を「通常期」という言葉を選択していました。これに対する増田さんからのフィードバックで、概念が言語化されたことは良いことだと評価頂きましたが、もう一歩踏み込んで、「稼ぎどき」と「閑散期」と言うこともできるという指摘を頂きました。これはどういうことかについて私なりの理解では、「繁忙期」「通常期」という2つの言葉では重み付けが等しいか、もしくはどちらかと言うと「繁忙期」は忙しくてマイナスなイメージも(言葉そのものからは)抱くかもしれません。一方「通常期」には何ら特別なイメージがありません。これを「稼ぎどき」「閑散期」と言い換えると、稼ぎどきには稼ぎどきのやり方、料金設定がある、「閑散期」にはまた別の戦略で稼働率を上げるといった考え方に素直につながっていきます。こういった適切な言葉の発見、そのドメインのビジネス的な価値が反映された言葉の発見によって、モデルが活き活きとするのだということを痛感しました。
おそらくチームメンバー同士が知り合いではなく、力量はたとえバラバラであっても対等な関係だったからこそ、モデリングに無駄な前提が入り込まず、メンバー間の認識を探りあいながら素直にモデリングに集中できたと感じました。こういったニュートラルなチームでのワークショップに参加するという機会は持とうとしてもなかなか持てるものではないと思います。とても新鮮で貴重な体験でした。同じようなワークショップがまたあれば、今後は積極的に参加していきたいと思います。
参考リンク
- 私たちPHPメンターズもDDDについての講演やワークショップを行っています。PHPカンファレンスで行ったDDDワークショップのスライド
- 本ブログのDDDタグ記事一覧