あけましておめでとうございます。 昨年末に『現場で役立つシステム設計の原則』の著者としてもよく知られている増田さんをお招きして、ドメイン駆動の考え方や技法についての勉強会を開催しました。

開催のきっかけ

よこはまクラウド勉強会に参加しているメンバーがDDD Aliance高崎さんと弊社で『現場で役立つシステム設計の原則』が話題になっているというお話をした際に、お繋ぎしましょうかというお話を頂き今回の勉強会が実現しました。 著者の方から直接お話を聞けるとは思いもしなかったので、今回の機会を実現していただいた高崎さんには心より感謝致します。

内容

まずはソフトウェアの諸問題は変更容易性に依存していているというお話からはじまり、モジュール構造の評価指標、設計スタイルの話からドメインロジックに焦点を当てる開発手法の話へとわかりやすく順序立てて話を進められていました。 ドメインロジックに焦点を当てる開発において要求を分析するための技法のお話では、Fact-Rule-Goalアプローチ、VETRO分析などのキーワードでお話しいただき、実際の業務においてどうビジネスポリシーをどう噛み砕いていくかというを説明していただきました。 コードに近づいたところの話としてはドメインオブジェクトの設計パターンも説明していただきました。 クラスの単位や計算の種類、区分オブジェクト、コレクションの操作や契約による設計などのキーワードで説明していただき、よりドメインロジックに焦点を当てたモデリング手法を理解できました。

強く印象に残っているのが区分オブジェクトのお話のところで、区分、種別を見つけたらEnumに寄せてみようというものでした。 例としてレンタルビデオの料金種別を考えたときにEnumに{ 新作, 一般, 子供 }に列挙すると新作の子ども向けの場合はどうなるのか等の違和感が出てくる。 その違和感を見つけることでより本質的なドメインに焦点を当てることができるというお話をしていただき非常に参考になりました。

もう1つ強く印象に残っているのが契約による設計で、事前条件/事後条件の担保をassertでするのではなく引数や戻り値の型を用いて行うという手法です。 値オブジェクトとして定義した型を利用することで、その型のインスタンスが生成されているということは、存在すべき値の範囲で生成されているということができていると見なすことができるというお話でした。 増田さんのこちらの資料にもある事前条件/事後条件の担保についてのお話です。 利用する側としても渡すべき関心事が明示的でわかりやすいです。

私の普段の業務でドメイン駆動設計のことで疑問に思っている事柄について増田さんに質問をしたところ、増田さんご自身の中での答えとともに、日々実験的に色々なアプローチでより良い答えを探し続けているというお話をいただきました。 私も日々の業務の中で色々なアプローチを試しより良い答えを探し続けていく姿勢を学びました。深く感謝致します。

最後に

atWareでは技術スタックの1つとしてDDDをあげられるよう日々学習しています。 その1つの活動として今回の増田さんや前回の記事のかとじゅんさんのようなDDDの先駆者の方々をお招きして社内ナレッジを蓄積しております。 その過程で私どもとしても提供できるアウトプットがあればぜひして展開していきたいと考えております。 今後とも宜しくお願いします。