ChatWork加藤さんによるドメイン駆動設計入門

毎週金曜日に社内のエンジニアを対象に開催している技術共有会ですが、先週は社外講師として糖質制限で御馴染みChatWorkの加藤さん(@j5ik2o)にお越しいただき、ドメイン駆動設計についてお話しいただきました。

f:id:takezoe:20151016102808j:plain

個人的にドメイン駆動設計の勘所と感じたのは以下の二点です。

  • ドメインの知識はすでに知っている人から引き出す(ただし成熟していないドメインの場合はエンジニアが考える必要がある場合もある)
  • エンジニア以外の人ともドメイン層の言葉(ユビキタス言語)で会話をすることでコミュニケーションのロスを抑制する

ここからわかるのはドメイン駆動設計というのは決してソフトウェア開発のためだけの手法ではなく、ビジネスサイドも含めソフトウェアに関わる全ての人たちのための手法であるということです。また、設計したドメインを実装に落とす際の様々なテクニックを紹介されていました。

たとえばライフサイクルの管理はドメインオブジェクトからは切り離す、依存関係を一方通行にするために下層のレイヤから上位層のレイヤへの通知が必要な場合はオブザーバーパターンを使う、といった具合です。

とはいえ、大切なのは個々のパターンを覚えることではなく、ドメイン層をきちんと設計すること、そして自分たちの定義したドメインを実装の拠り所にすることなのではないかと思います。ドメイン層に実装都合のコードを入れないために、様々な指針やテクニックが存在するわけで、単にこれらのテクニックを当てはめるだけでは意味がありません。

現実的には多層レイヤー化することによる実装コストの増大、ドメインが変わった際の修正コストなども気になるところです。機会を改めてお聞きしてみたいと思います。

この共有会、普段は技術的な話が多いのですが、今回は設計の話ということでいつもにも増して学ぶべき点が多かったのではないかと思います。講演後も加藤さんを囲んで質疑が続き、中には「今までで一番面白かった」と言っているメンバーもいたほどです。自分で勉強するにしてもかなりの労力と実践が必要なところ、短時間でエッセンスをお話しいただけるというのは非常にありがたいことです。

ChatWorkさんとはこれまでも二回に渡って共同でScala勉強会を開催させていただいていますし、今後もお互いにこういったノウハウをシェアさせていただければと思います。加藤さんありがとうございました!