エンジニアリンググループの西名(@mikesorae)です。
最近エムスリー社内でドメイン駆動設計(以下DDDと表記)への関心が高まり、社内でも勉強会を開催する流れになりました。
せっかくなので有識者から効率的な学習方法や注意点を学ぼうということで、DDD Community JPの運営などで活躍されている松岡幸一郎(@little_hand_s)さんをお招きし、DDD座談会を開催しました。
エムスリーさんにお邪魔してドメインモデリングハンズオンしました。実際の業務のネタでモデリングはやはり盛り上がる!
— 松岡@DDDブログ書いてます (@little_hand_s) 2019年6月19日
出張ハンズオン、勉強会やってますので興味ある方ご相談を〜! pic.twitter.com/7oTAQetSZY
本記事では、その中でも面白かった内容をピックアップしてご紹介します。
DDDを始める際の注意点
まずは、DDDに取り組む際にどんなことに気をつけるべきかを質問してみました。
DDDはどうやって勉強すれば良い?
実践ドメイン駆動設計を読む
- エヴァンス本は初心者が読むには少し難しい
- カウボーイのくだりは読み飛ばしてOK
DDDリファレンスを読む
- エリック・エヴァンス本人も参加している
- DDDの用語が定義されている
DDDを使うべきでないシーンはある?
向いているケース
- 対象のドメインが複雑なもの
あまり向いていないケース
- 単純すぎるもの(CRUDだけで済む)
- 逆に構造が複雑になり改修コストがかかる場合
- 技術的に複雑なもの
- ローレイヤの技術が価値の中心となるアプリケーション
- 単純すぎるもの(CRUDだけで済む)
RailsにおけるモデルとDDDのモデルの違いは?
MVCにおけるモデルとは
- ユーザインターフェースとは独立し、アプリケーションによって利用されるデータ構造。ビジネスロジックやデータの管理の責務を持つ
DDDにおけるモデルとは
model: A system of abstractions that describes selected aspects of a domain and can be used to solve problems related to that domain
*1- 対象領域の特定側面を表現し、関連する問題を解決するために使用する抽象物
- 良いモデルとは問題を解決できるモデルである
DDDにおけるモデルは、より問題解決にフォーカスしているとのことでした。
アプリケーションロジックかドメインロジックはどうやって判断する?
アプリケーション層
- ユースケースが現れる
- アプリケーションがユーザからどのように使われるかが記述される
- 基本的にはアプリケーション無しでユースケースは存在しない
ドメイン層
- ドメイン知識(ビジネスルール)が現れる
- アプリケーションが存在しなくてもドメイン知識は存在する
日本人がDDDをやるときユビキタス言語は何語で書けばいい?
- 日本語派
- ユビキタス言語は日本語で書く
- プログラムもユビキタス言語も日本語で書く
- 英語派
- 普通に英語で書く
- 日本語はローマ字にして書く
いくつかの流派が存在しますが、一番大事なのはチーム内での認識がぶれないことだそうです。
ユビキタス言語のアップデートをどう共有すべき?
- 用語集を作成する
- 運用されなくなることが多い
- 手間がかかるのであまりおすすめしない
- PlantUMLでモデルを作成し、リポジトリで管理する
- 画面デザインに用語を反映する
- エンジニア以外の人にも見てもらえる
ドメインモデリングハンズオン
理論よりも実際に体験した方が早いだろうということで、具体的なユースケースをもとに全員でドメインモデリングのハンズオンを行いました。
今回はアンケート配信に関するドメインのモデリングを行いました。 約30〜40分の短い時間でしたが、ビジネスルールにフォーカスすることでとても良い議論とモデリングができました。
モデリングを行う際に注意したポイントを紹介します。
スコープを決める
アクターやユースケースを書き出し、どの範囲をモデリングするのかを合意します。
これにより、議論が無限に発散するのを防ぐことができました。
ビジネスルールをコメントで書き込む
モデルの横にコメントでビジネスルールを書き込みます。
ルールを書き込むことで新しい概念の発見やモデルの分割に関する議論が活発になりました。 書き込んだコメントは後で実装やテストをする際にも役立つということなので、皆さんも是非一度試してみてください。
ドメインモデルと実装を行き来する
ドメインモデリングでは基本的にはビジネスルールに沿って議論しますが、集約境界やバッチ実行などどうしても実装と切り離せないものも存在します。
実装とモデルを行き来することで、実用に耐えるモデルを作れていることが実感できました。
まとめ
相談役として松岡さんをお招きすることで、DDDの学習・運用についての貴重な意見をお聞きすることができました。
また、ドメインモデリングハンズオンを行うことで、参加者がより具体的な導入イメージを持つことができました。
今回学んだモデリングのノウハウは様々なプロジェクトで役に立つと思うので、引き続きDDDやモデリングに関する取り組みを続けていきたいと思います。
We are hiring
エムスリーでは、ユーザに価値を届けるためにより良い設計を追求できるエンジニアを募集しています。 ご興味のある方は、下記リンクからお問い合わせ下さい!