🎉

DDD(ドメイン駆動設計)を勉強していく時に役立つ情報まとめ

2023/02/01に公開

DDDやCleanなどの設計やアーキテクチャが好きなrevenue-hackです!

今回はDDDを学ぶときに役立つ情報をまとめていこうと思います。

この記事の対象者は?

  • DDD(ドメイン駆動設計)を学びたい初学者
  • DDDを学習したけど挫折した人
  • 設計について学びたいと思っている

あたりが対象となります。

DDD(ドメイン駆動設計)とは?

DDDとはドメインを中心として開発をしようという開発・設計手法になります。

よくDDDはアーキテクチャだと思っている方がいますが、違います!!

DDD≠アーキテクチャ

です!

そのへんの誤解を解くのにまずは読むと良い記事です!
https://qiita.com/tak001/items/e4415385e955b7ac261c#dddとはドメインの知識に焦点を当てた設計手法

ユビキタス言語の作り方

DDDにおいては欠かせないのがユビキタス言語の作成です!
プロジェクト内で同じモノの名前が違う名前で呼ばれ、結果的にコードに名前が反映されず認識齟齬が起きてしまうと言う問題はよくあるかなと思います!

そういったのを避けるためにユビキタス言語はあります。

エンティティとバリューオブジェクトの違い

  • エンティティとは
  • バリューオブジェクトとは

についてイラスト付きで具体的に解説しているのでわかりやすいです!

エンティティとバリューオブジェクトの違いがわからない方はまずはこの記事をチェックすると良いです!

https://little-hands.hatenablog.com/entry/2018/12/09/entity-value-object

集約の決め方

集約の決め方というのは、このようにすれば良いという決まった方法はないです!

なので集約を決める時の一例として以下の記事を参考にすると良いです!
(ちなみに自分が書きました)

  • ドメインモデル図って何?
  • 集約って何?
  • 集約の決め方

とかを解説しています。

https://zenn.dev/revenuehack/articles/5f61d3519f20c1

コンテキストについて知りたい時

コンテキストというのは日本語で「境界」ということですが、DDDにおいても同様で境界によってドメインの見方が変わります。

例えば(あまり良い例かわかりませんが)スマホはインターネットなどにアクセスするインターフェースと考える人が多いと思いますが、スマホを開発する側はもっと細かいCPUやらメモリやら色々な側面でスマホというものを捉えています。
つまり人や立場によってスマホの見方は様々だということです。

そのあたりのコンテキストというものを理解するのに良いのは、こちらの記事です!
イラスト付きでコンテキストの概念が理解できます。
https://little-hands.hatenablog.com/entry/2017/11/28/bouded-context-concept

DDD+オニオンアーキの具体的な実装方法を体系的に学ぶ

先程DDDは開発手法と言う話を簡単にしました。
DDDはなにかのアーキテクチャと組み合わせて初めて実装までの話になります。

  • DDD+オニオンアーキテクチャ
  • DDD+クリーンアーキテクチャ
  • DDD+レイヤードアーキテクチャ

などの組み合わせでやることが多かったりします。

いわゆる戦略的DDDとも言う、実装の部分の話になります。
そのあたりを体系的に理解したい方はこのあたりがおすすめです!
バリューオブジェクトやエンティティの実装方法から始まり、

  • ドメインサービス
  • アプリケーションサービス

などを実際のサンプルをコードを使って説明しています。

https://nrslib.com/bottomup-ddd/

DDD(ドメイン駆動設計)の実装で困ったときに見ると良いQA

DDDで実際に困ったユースケースが色々と載っているため、参考になります!

勉強して、実際にDDDの開発手法でやる際には役立つので困ったら見ると良いです!
https://github.com/little-hands/ddd-q-and-a

DDD(ドメイン駆動設計)を学びたい人へ

DDDを学びたいけど、独学だと難しそう、挫折したという方やクリーンアーキテクチャなどの設計を学びたいという方はこちらのMENTAと言うサービスを通して教えているので、興味のある方は是非覗いてみてください!

https://menta.work/plan/2217

またDDDなどの設計やアーキテクチャに関してだったり、AWSやTerraform、RDBに関してつぶやいていたりするので、よければフォローお願いします!!
https://twitter.com/tagaranoko1014

Discussion