PR

ドメイン駆動設計(Domain-Driven Design / DDD)の本質と大事なこと

7. その他

こんにちは。Tomoyuki(@tomoyuki65)です。

Go言語(Golang)の仕事では、よくドメイン駆動設計(Domain-Driven Design / DDD)での開発経験が求められたりします。

これはマイクロサービスとして開発する際にGo言語が選ばれることが多いこともありますが、ただ実際にはドメイン駆動設計は簡単ではありません。

そんな私もドメイン駆動設計の本質を知りたいなと思い、本「ドメイン駆動設計をはじめよう ―ソフトウェアの実装と事業戦略を結びつける実践技法」を購入して読みました。

この記事では、この本を読んで私が学んだドメイン駆動設計の本質や大事なことをまとめておきます。

 

ドメイン駆動設計(Domain-Driven Design / DDD)の本質と大事なこと

ドメイン駆動設計(Domain-Driven Design / DDD)とは?

ドメイン駆動設計(Domain-Driven Design / DDD)は、システムの内部構造ではなく、ビジネスや業務(ドメイン)の理解を中心に設計を行うアプローチです。

開発者と業務担当者が共通の言葉(ユビキタス言語)を使いながら、業務ルールや概念をそのままコードに反映していくのが特徴です。

また、複雑な業務を整理するために、関心ごとごとにモデルや責務を分けることで、変更に強く理解しやすいシステムを目指します。

 

ドメイン駆動設計の本質

私が本「ドメイン駆動設計をはじめよう ―ソフトウェアの実装と事業戦略を結びつける実践技法」を読んで理解したドメイン駆動設計の本質としては、事業活動が全てだということです。

単に設計手法の話というわけではなく、複雑で変化し続ける事業活動そのものに向き合い、その課題解決のためのソフトウェアを柔軟に進化させ続けるための考え方です。

そのため、ドメイン駆動設計をする前にまずはしっかり事業活動を分析し、事業領域(ビジネスドメイン)における業務領域(サブドメイン)を三つのカテゴリー(中核の業務領域、補完的な業務領域、一般的な業務領域)のいずれかに分類する必要があります。

その上で、中核の業務領域は特に複雑でソフトウェアとして実現するのが難しいため、ドメイン駆動設計という手法を用いることで、柔軟性を持たせて変化に強い設計を実現していくことが重要になります。

 

ドメイン駆動設計の際に大事なこと

ドメイン駆動設計をする際に大事なこととしては、チーム内外を問わず関係者全員が『同じ言葉(ユビキタス言語)』でドメインを捉えることです。

この『同じ言葉(ユビキタス言語)』というのは、チーム全体の統一言語のことを指しますが、会話、設計図、コード、ドキュメントまで一貫して同じ単語を使わないと、認識のズレが生まれ、ドメイン駆動設計はうまく機能しません。

 

業務ロジックの実装方針について

業務ロジックを実装する際については、必ずドメインモデルを使うのがいいわけではなく、業務領域(サブドメイン)の性質(中核の業務領域、補完的な業務領域、一般的な業務領域)に応じて、適切な実装方法を選択するのが重要になります。

中核の業務領域なら複雑で変更も多いため、ドメインモデルを採用します。その際にもし金額の扱いや分析・監査・履歴の重要性が高い場合にはイベント履歴式ドメインモデルを採用します。(テスト方針はピラミッド形で、単体テストを最重視)

一方で補完的な業務領域や一般的な業務領域については、必ずしも重厚な設計は必要ないため、データ構造が複雑な場合はアクティブレコード(テスト方針はダイヤモンド形で、サービス層と業務ロジック層を統合するテストを最重視)、複雑でない場合はトランザクションスクリプト(テスト方針は逆ピラミッド形で、E2Eテストを最重視)といったシンプルな実装を採用するのが最適です。

このように業務ロジックの実装方針として重要なことは、全てを同じやり方で実装するのではなく、業務の重要度と複雑さに応じて設計の重さを適切に調整することです。

 

業務領域(サブドメイン)の性質変化について

業務領域(サブドメイン)の性質(中核の業務領域、補完的な業務領域、一般的な業務領域)は固定されたものではなく、時間の経過で変化する可能性があります。

ある時点では一般的な業務領域だったものが、事業の成長や戦略の変化によって中核の業務領域になることもあります。

そのため、適宜事業活動を再分析し、変化に応じて設計やコードを柔軟に見直していくことが重要になります。

 

ドメイン駆動設計(Domain-Driven Design)を学ぶのにおすすめの本「ドメイン駆動設計をはじめよう ―ソフトウェアの実装と事業戦略を結びつける実践技法」

今回私がドメイン駆動設計の本質を知るために読んだ本が「ドメイン駆動設計をはじめよう ―ソフトウェアの実装と事業戦略を結びつける実践技法」になります。

この本を読むことにより、ドメイン駆動設計とはなんなのかを理解でき、かつこういった知識が無いままドメイン駆動設計をやろうとしても失敗するのがよくわかるようになります。

※本の内容は難しいため、わからないところは適宜AIツールに質問して解説してもらいながら学んでいくと理解を深められます。

 

最後に

今回は本「ドメイン駆動設計をはじめよう ―ソフトウェアの実装と事業戦略を結びつける実践技法」を読んで私が学んだドメイン駆動設計の本質や大事なことをまとめました。

この本を通じて、ドメイン駆動設計が単なる設計手法でないことや、ソフトウェア開発における最も大事なことが事業活動であることが理解できました。

この本はエンジニアなら全員読んだ方がいいと思ったので、ぜひ一度読んでみて下さい!

 

コメント

タイトルとURLをコピーしました