はじめに
この記事では、自分がドメイン駆動設計について学ぶにあたり、より理解が深まった本、記事を紹介します。
世の中には様々なシステムがありますが、特に設計手法やアーキテクチャが考慮されずに、混沌となっているコードが大量にありますね。自分が関わっていたシステムもそうでした。
ドメイン駆動設計(Domain Driven Design / DDD)はそういったコードを生み出さないための設計手法です。
また、世の中では、まぁまぁの年次になっていてもこれを理解できていない層がそれなりにいます。
(最も、自分もわからないことだらけではあります。)
そのため、DDDを学ぶことで、今のプロジェクトでリードできるような責務を得られるかもしれませんし、より良い企業へ転職するための武器の一つとなるかもしれません。
今、読者の皆さんがDDDを学ぶことを選んだことは決して間違いではありません。
対象読者(マインド的な意味合いが強い)
対象読者層は以下ですが、これは当時の自分がどういう状態だったかも示しています。
- 業務コードを書いていて、キモいということはわかっているが、その言語化をうまくできない方
- コーディングの前段となる設計について、体系的に理解できていなくてモヤモヤする方
前提となるスキル
- Webアプリケーション開発における設計・製造工程の経験
- 設計は、ウォーターフォールで言うところの基本設計・詳細設計を指す
- また、非機能に関わる設計経験は不問
- オブジェクト指向の理解(入門書1冊読んだ経験程度)
本記事、および該当書籍・記事を読んだ後の効果
- コーディングをする前段の設計で、どのような手法があるかを理解できる
- 上記の設計を踏まえて、それをどのように実装に落とし込めるかを理解できる
- コーディングをする上での頻出となる実践的なパターンを理解できる(DDDとしての)
- DDDとアーキテクチャの関係性を理解し、ある程度0→1でコーディングの決まりを作れるようになる(どういう層があり、どういう役割で、どういう実装をすればいいかがわかる)
ドメイン駆動設計とは
実際の業務要件や問題点を的確に捉え、それを効果的に解決するためのシステムを構築する必要があります。
この業務要件の核心を深く理解し、それをシステムに反映するためのアプローチが、ドメイン駆動設計(DDD)です。
改めてですが、私がDDDを学ぶ上で、どのような書籍や資料を、どのような順番で読んだかを以下に示します。
また、著者自身も日夜DDDを学んでいる者であるため、この記事は常にアップデートが見込まれます。
おすすめの書籍・記事
1. ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本
【概要】
設計というよりは、コーディングの観点でより実践しやすいパターンを説明してくれています。
【効果】
モデリングの観点等の言及はありませんが、オブジェクト指向がわかるくらいのスキルを持つ方であれば、この本をご一読するだけで、業務コードを大きく改善できるはずです。
2. 【DDD入門】TypeScript × ドメイン駆動設計ハンズオン
【概要】
DDDの戦略的設計(ドメインモデリング)についても解説している記事です。
【効果】
1の書籍よりも前段階(コードを書く前)で、どのようなことをしなければいけないかを理解できるようになります。
また、戦術的設計(コード実装)の各章では、1の書籍で言及している各パターンと同様のことを説明していますので、理解をより定着させるための練習にもなります。
3. なるセミ イベントストーミング入門【ノーカット版】
【概要】
イベントストーミングのやり方について解説している動画です。
2の記事ではイベントストーミングについての言及がさらっとしていた(筆者はそう感じていますが、コンテキストを読み解く力が欠けているだけかもしれません。)ため、よりイベントストーミングの理解を深めるための学習が必要だと感じ、こちらにたどりつきました。
【効果】
記事等だと、出来上がっているもの(あるいはその過程の切り取り)についてのみの言及になり、どういう思考プロセスのもと、イベントストーミングが行われているかの理解が不十分でした。
こちらの動画を通し、どのような思考プロセスでイベントストーミングをしているかを理解できました。
また、1の著者でもある成瀬 允宣さんが投稿されているものですので、信頼度があります。
おわりに
業務要件をシステムへ反映するために苦悩していた自分にとって、DDDとの出会いは形容しがたい感動を覚えました。
この記事が、ソフトウェア開発を学ぶ全ての方々の一助となれば幸いです。