こちらのイベントに参加してきたので、会の様子と感想を書いていきます。
会の概要
DDDのコンテンツを細かく分けて1テーマ10分で解説してみようという企画です。10分解説し、残り10〜20分YouTubeLive上で質疑応答していこうという会です(残り10-20分については、アーカイブには残さないということで、本イベントでのみ視聴できる形でした)
会の様子
DDDの目的
端的に言うと、機能性と保守性を高めることがDDDの目的だというお話がありました。
DDDでは、機能性と保守性の両方を高めることができれば大きな相乗効果があり、これがDDDのうまみだということでした。
DDDでモデリングをどうやるか
まず、システム関連図について説明がありました。システム関連図を書くことで、「誰がシステムを使うのか?」「開発するシステムが直接的にどのように関わってくるのか?」といった質問に答えられるようになるということです。
続いて、ユースケース図について説明がありました。ユースケース図を書くことで、ドメインモデル図を描く範囲が絞り込めるということです。
最後に、ドメインモデル図とオブジェクト図について説明がありました。
最終的にはこれらがクラスになるため、ソースコードを書く際のインプットになるということです。
また、ドメインモデルに関しての知識が整理されると共に、開発者と(場合によっては)ビジネスサイドでの会話が捗るということでした。
なお、状態遷移図とER図も書くことはあるということですが、こちらは補助的な役割になることが多いというお話でした。
モデリング図の管理方法
diagrams.netで管理されているということでした。
具体例を書くために最適なツールがこちらということで、Google Drive上に保存できるため履歴を追うことも可能だということです。
また、1ファイルにどこまで治めるかという話については、何となくの感覚で分けてしまうということでした。
MVCフレームワークとDDDの相性
Railsフレームワークなどの場合は、DDDを無理やり入れてしまうとフレームワークの思想から外れてしまい保守性が下がってしまうことがあるので注意した方がよいというお話でした。
DDDの勉強法
Evans本や実践DDDに比べて大分わかりやすいということで、松岡さんの本がお勧めされていました笑*2
なお、ドメインイベントについては、英語の方が圧倒的に情報量が多いので、英語の文献を当たることをお勧めするということです。
モデリングとコーディングの往復
モデリングの再検討は積極的に行って良いというお話がありました。
エンティティと値オブジェクトの違い
値がイミュータブルかどうかで区別するというお話でした。このあたりは、別枠で詳細に解説をするということでした。
ドメインモデリングで最初にどこに着手するか?
コードにないような具体的な事例がある場所から着手するのが一つの作戦ということでした。こうした場所でなおかつ今後機能拡張が望まれるような箇所では高い効果を発揮するということです。
システム詳細の話になってしまいモデリングが進まない
モデリングの目的に立ち返るような工夫を行うことが重要だというお話でした。
DBに作成日・更新日はインフラ層に追加しても良い?
問題ないということです。
DDDはオブジェクト指向前提なのか?
エンティティとかリポジトリパターンが使いやすいのがオブジェクト指向ということですが、こういったパターンが使える前提であれば、関数型プログラミングでも問題ないということでした。
モデリングが有用なユースケース
これは、要件がまだ決まっていないような状態で特に有用だということでした。
また、業務領域はどのようなものでも問題ないというお話でした。
オブジェクト図にルールを書くのはコストが高く破綻するのでは?
これは、別シートにルールを切り出すなどといった取り組みを行うことで破綻をハイ日できるというお話でした。
DDDのROI
保守も自分たちでする場合は、十分に投資した分の効果を回収できるということですが、受託開発で作り切りのプロジェクトなどだと、たしかにそこまでROIは高くないというお話がありました。
エンティティの見つけ方
ここは具体例に注目してエンティティを見つけることが重要だというお話がありました。
会全体を通した感想
10分位の気軽なイベントかと思っていましたが、想像以上に情報量が多く、大分ぎゅっと情報が詰まったイベントでした。
質問量もなかなかありましたが、全てに対して回答をしてくれていたのが印象的でした。