はじめに
データベーススペシャリストの過去問を題材に、
ドメイン駆動設計でモデリングをして、
エンティティ、リポジトリ、ユースケース、ドメインサービスのサンプルプログラムをして
それらのテストコードを作成するまでをまとめました。(Java + Spring+jOOQでRest API作成)
このサンプル作成後、実際に現場でもドメイン駆動設計の思想を取り入れたり、
ドメイン駆動設計を実際に手を動かしながら実践する中で、
気付きや、意識すべきポイントなどなど発見があったのでその辺りもまとめています。
実際に手を動かして、
サンプルを動かしたり少し変更して動作確認したい方は
開発環境構築をこちら参考に構築頂ければと思います。
IntelliJ IDEA、docker desktop(postgreSQL、keycloak)、Flyway、DBeaverを利用したバックエンド開発環境構築
動画でもまとめているので、是非ご覧ください。
松岡さんのSUDOモデリングを参考にドメイン駆動設計でドメインモデリング
こちらの記事にまとめています。
ドメイン駆動設計のモデリング練習|データベーススペシャリストの過去問を題材に
実際に手を動かしてモデリングすることで、意外と手が思うように動かなかったり、
ER図に慣れているせいでどうしてもテーブル設計っぽくなってしまったり・・・・
集約の範囲を決めるのに迷ったりなどなど、
実践してみると慣れるまでは少し難しいなと思いました。
ドメイン駆動設計でサンプルプログラム作成
エンティティと値オブジェクトのサンプルプログラム作成とテストコード作成
こちらの記事にまとめています。
ドメイン駆動設計の練習!!サンプルプログラム実装編|エンティティと値オブジェクト作成
モデリングで試行錯誤しましたが、モデリングの通り実装するだけなので、
比較的すんなりいく印象です。
モデリングとプログラムの世界が綺麗にマップして、
sudoモデリングの凄さを改めて実感しました。
リポジトリのサンプルプログラム作成とテストコード作成
こちらの記事にまとめています。
リポジトリでは集約単位でセットで永続化したり、
再構築できるようにしました。
ここもモデリングで決めた集約の通り実装するだけなので、
あまり悩むことはないと思います。
ドメインサービスのサンプルプログラム作成とテストコード作成
こちらの記事にまとめています。
ドメイン駆動設計でのサンプルプログラム実装例|ドメインサービス
エンティティの集合を扱うケースなどのためにドメインサービスを利用しました。
なんでもかんでもドメインサービスを使ってしまうのはよくないということや、
使う際の注意点などなどまとめています。
ユースケースのサンプルプログラム作成とテストコード作成
こちらの記事にまとめています。
ドメイン駆動設計でのサンプルプログラム実装例|ユースケース層
今まで作ってきたエンティティやリポジトリなどを組み合わせて1つのユースケースを作成しました。
いろんなチェックやビジネスルールをここに書く必要がなく、
エンティティをインスタンス化して使ったり、リポジトリを使うだけの
シンプルな作りになることが実感できます。
ビジネスルールをユースケースに書いて、
ビジネスロジックがあちこちに散らばることはなくなります。
CQRSのサンプルプログラム作成とテストコード作成
こちらの記事にまとめています。
ドメイン駆動設計で複数集約にまたがるような検索やページング、性能問題などを
CQRSを導入することで解決していきました。
ただ、参照モデルは必要に応じて作成するのと、ユースケースに特化させる
イメージで作成することが重要です。
プレゼンテーション層のサンプルプログラム作成とテストコード作成
こちらは現在まとめ中です・・・・
APIのエンドポイントとなり、リクエストパラメータをユースケースに渡すフォーマットにデータ加工し、
ユースケースから受け取ったデータをクライアントに返却するフォーマットにデータ加工します。