ドメイン駆動設計の練習!!モデリング〜サンプルプログラム・テストコード作成(まとめ記事)

はじめに

データベーススペシャリストの過去問(2021年秋午後Iの問1)を例に、

ドメイン駆動設計でモデリングをして、

Rest APIのサンプルプログラムとテストコードを作成しました(Java + Springで作成)。

 

ドメイン駆動設計を実際に手を動かしながら実践する中で、

自分なりの理解や気付き、意識すべきポイントなどなどいろいろ発見があったので記事にまとめました。

これからドメイン駆動設計を導入、勉強しようと考えている方に1つのサンプルとして参考になればと思います。

 

MEMO

本記事では、

松岡さんの「サンプルコード&FAQ」、「モデリング/実装ガイド」を参考にさせて頂きました。

モデリングやサンプルプログラム、テストコードの作成は本をなぞった形になります。

(その点お含みおきください)

 

実際に手を動かして、

サンプルを動かしたり少し変更して動作確認したい方はこちらの開発環境構築を事前に実施してください。

バックエンド開発環境構築手順まとめ!!IntelliJ IDEAセットアップ〜FlywayでpostgreSQLにテストデータ投入などなど

 

 

この記事を書いている僕の8年間職歴についてはプロフィールにまとめているので、

興味のある方はそちらを参照ください!!

釣りキチ翔平プロフィール釣りキチ翔平プロフィール

 

 

ドメイン駆動設計のモデリング編

こちらの記事にまとめています。

ドメイン駆動設計の練習!!モデリング編

 

実際に手を動かしてモデリングすることで、意外と手が思うように動かなかったり、

ER図に慣れているせいでどうしてもテーブル設計っぽくなってしまったり・・・・

集約の範囲を決めるのに迷ったりなどなど実践してみると慣れるまでは少し難しいなと思いました。

 

ドメイン駆動設計のサンプルプログラム作成編

エンティティと値オブジェクトのサンプルプログラム作成とテストコード作成

こちらの記事にまとめています。

ドメイン駆動設計の練習!!サンプルプログラム実装編|エンティティと値オブジェクト作成

 

モデリングで試行錯誤しましたが、モデリングの通り実装するだけなので、

比較的すんなりいく印象です。

モデリングとプログラムの世界が綺麗にマップして、sudoモデリングの凄さを改めて実感しました。

 

リポジトリのサンプルプログラム作成とテストコード作成

こちらの記事にまとめています。

ドメイン駆動設計の練習!!サンプルプログラム実装編|リポジトリ作成

 

リポジトリでは集約単位でセットでデータベースに登録したりデータベースから値を取得できるようにしました。

ここもモデリングで決めた集約の通り実装するだけなのであまり悩むことはないと思います。

 

ドメインサービスのサンプルプログラム作成とテストコード作成

こちらの記事にまとめています。

ドメイン駆動設計の練習!!サンプルプログラム実装編|ドメインサービス作成

 

集約を跨ぐ相関チェックのようなことをするためにドメインサービスを利用しました。

なんでもかんでもドメインサービスを使ってしまうのはよくないということや、

使う際の注意点などなどまとめています。

 

ユースケースのサンプルプログラム作成とテストコード作成

こちらの記事にまとめています。

ドメイン駆動設計の練習!!サンプルプログラム実装編|ユースケース作成

 

今まで作ってきたエンティティやリポジトリなどを組み合わせて1つのユースケースを作成しました。

いろんなチェックやビジネスルールをここに書く必要がなく、

エンティティをインスタンス化したりリポジトリを使ってDBにデータを出し入れするだけの

シンプルな作りになることが実感できます。

ビジネスルールが至る所に散らばる心配はなくなります。

 

CQRSのサンプルプログラム作成とテストコード作成

こちらの記事にまとめています。

ドメイン駆動設計の練習!!サンプルプログラム実装編|CQRS

 

ドメイン駆動設計で複数集約にまたがる参照を行う際に発生する課題を

CQRSを導入することで解決していきました。

 

ただ、参照モデルは必要に応じて作成するのと、ユースケースに特化させる

イメージで作成することが重要だと感じました。

 

 

プレゼンテーション層のサンプルプログラム作成とテストコード作成

こちらは現在まとめ中です・・・・

 

APIのエンドポイントとなり、リクエストパラメータをユースケースに渡すフォーマットにデータ加工し、

ユースケースから受け取ったデータをクライアントに返却するフォーマットにデータ加工します。

 

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください