概要
新プロダクトの開発において、ドメイン駆動設計(DDD: Domain Driven Design)の採用が決まり、その管理を主に担当することになりました。その過程で0からどのように学んでいくと効率的かについて考えたことをまとめます。
効能
- DDDを始める際に効率的に学習することができます。
- 具体的に手順をイメージしながらDDDに取り組むことができます。
手順
###1. PDFを読む Domain Driven Design(ドメイン駆動設計) Quickly 日本語版
- 下で紹介しているエヴァンスの本の要約したようなもので読みやすいです。
###2. 参考になるサイトを参照してイメージを膨らませる
- 具体的にどのようにモデリングしていけばいいのかのイメージを膨らませるために、レイヤーアーキテクチャーについて詳しいものや具体例の分かりやすいサイトを参考にします。
新卒にも伝わるドメイン駆動設計のアーキテクチャ説明[DDD]
[DDD]ドメイン駆動 + オニオンアーキテクチャ概略
ドメイン駆動で開発する ラフスケッチから実装まで
###3. ドメインモデルを構築する
- 上記のサイトなどを参考にドメインモデルをコンテキストごとに作成します。
- ドメインモデルで登場した言語をスプレッドシートなどに、日本語・英語(実装の際に必要)・意味・代替案などの項目を列挙していきます。
- ユビキタス言語をまとめた表はモデルの変更や、サービスの精査に伴って単語の定義を変更した場合に、更新していきます。
###5. ドメインモデルをコードに落とし込む・改善を続ける
- ここはまだ経験中です!
まとめ
新卒1年目の自分でもDDDを理解して実践していけるような手法をご紹介しました。方法を身につけた上でしっかりと経験を積んでいければと思います。
(疑問がある場合、より詳細に知りたい場合)
適宜有名なDDDの本を読む『[エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)] (https://www.amazon.co.jp/%E3%82%A8%E3%83%AA%E3%83%83%E3%82%AF%E3%83%BB%E3%82%A8%E3%83%B4%E3%82%A1%E3%83%B3%E3%82%B9%E3%81%AE%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88-Architects%E2%80%99Archive-%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%96%8B%E7%99%BA%E3%81%AE%E5%AE%9F%E8%B7%B5-%E3%82%A8%E3%83%AA%E3%83%83%E3%82%AF%E3%83%BB%E3%82%A8%E3%83%B4%E3%82%A1%E3%83%B3%E3%82%B9/dp/4798121967/ref=pd_lpo_sbs_14_img_0?_encoding=UTF8&psc=1&refRID=XZVC28N9T6BCRZ3WS0TY)』、『[実践ドメイン駆動設計 (Object Oriented SELECTION)](https://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88-Object-Oriented-SELECTION-%E3%83%B4%E3%82%A1%E3%83%BC%E3%83%B3%E3%83%BB%E3%83%B4%E3%82%A1%E3%83%BC%E3%83%8E%E3%83%B3/dp/479813161X/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88&qid=1568972152&s=books&sr=1-2)』
(※私は最初にエヴァンスの本を読んだのですが、なかなかとっつきずらく読み進めるのに時間がかかったため、上記の手順をおすすめします。ぜひご感想をお聞かせください。)
工夫点
- エヴァンスの本が難解なため、辞書的・補助的な役割で活用するという方法を提案しています。
- ドメインモデルを作成する際に具体的なイメージが湧かないとやりづらいため、具体例の多いサイトを紹介しています。
- ユビキタス言語の管理についてはチームで共有のスプレッドシートを用いて変更や追加の際にコメントをつけてもらってやっていますが、最適かはまだ分かりません。