初めてDDDを実践する方に向けて〜DDD実践のためのきほん〜

はじめに

この記事では、

僕が現場でDDD取り入れた経験、

書籍・勉強会などを通じて学習した内容、

などを言語化して、


(僕が現時点で考えている)

DDDの実践前に抑えておきたいきほんをまとめました。


ポイント管理システムをテーマ作成した

DDD×クリーンアーキテクチャでのサンプルコードを

使いながら解説しています。


DDDで登場する設計テクニックをコードで学ぶ

まずはコードからDDDで登場する設計テクニックを学んでいきましょう。


今回テーマにしているポイント管理システムでは、

店舗からレシート情報とカード、ポイント利用などを連携され、

付与ポイントの加算、ポイント利用の減算などの

ポイント管理ができるシステムを想定しています。

ポイント管理システムのイメージ図


ドメインモデルを表現するものたち

ポイント管理システムのコアになるドメインは

会員が保持するポイントの管理、

付与ポイント数の算出

などになるでしょう。


このドメインにおいて、

ソフトウェアで表現すべき重要な概念だけを抽出して

作成したドメインモデルは

エンティティと値オブジェクトというものを利用して表現します。

まずはこのエンティティと値オブジェクトは何か??

これらをコードでどのように表現するかを学びましょう!

詳細はこちらの記事をご覧ください。

コードで学ぶエンティティと値オブジェクト〜DDD実践のためのきほん〜


ドメインオブジェクトを支えるものたち

DDDでソフトウェアを開発していると、

どうしても1つのエンティティや値オブジェクト

では表現しきれないケースが出てきます。


ファクトリー

エンティティなどのドメインオブジェクト生成手順が複雑で、

それ自体が立派な業務ロジックになることもあります。

この場合はドメインオブジェクト生成手順を

ファクトリーに切り出すことを検討しましょう。

詳細はこちらの記事をご覧ください。

コードで学ぶファクトリー〜DDD実践のためのきほん〜


ドメインサービス

複数のドメインオブジェクトがなければ特定の判断ができない、

ドメインオブジェクトの集合に対して特定の判断を行いたい。

など、ドメインオブジェクトのメソッドにロジックを置くには、

不自然になることもあります。

この場合はドメインサービスに

業務ロジックを切り出すことを検討しましょう。

詳細はこちらの記事をご覧ください。

コードで学ぶドメインサービス〜DDD実践のためのきほん〜


リポジトリ

ソフトウェアは何かしらの副作用を起こしながら、

特定の問題を解決していきます。

よくある副作用の1つにデータの永続化があります。

ドメインオブジェクトを永続化し、

後から再構築するためににはリポジトリを利用します。

詳細はこちらの記事をご覧ください。

コードで学ぶ集約とリポジトリの関係〜DDD実践のためのきほん〜


ドメインオブジェクトを組み合わせてユースケースを実現させるもの

ドメインオブジェクトはそれ自体では、

課題解決はできません。


ドメインオブジェクトを組み合わせて、

1つのユースケースを実現させるための、

ユースケース(アプリケーションサービス)

が必要です。

詳細はこちらの記事をご覧ください。

コードで学ぶユースケース(アプリケーションサービス)〜DDD実践のためのきほん〜


その他のものたち

DDDを実践していくと他にも

さまざまな課題が発生し、

必要に応じて対策する必要があります。


CQRS(Command Query Responsibility Segregation)

DDDで支払登録ユースケースに必要なドメインオブジェクトを用意し、

ポイント履歴一覧取得ユースケースでのモデルとしてもそれを使い回すと、

モデルの詰め替えが複雑だったり、

パフォーマンス問題の懸念などが発生します。

レシート番号ポイント取引履歴タイプポイント数
0000000001付与100
0000000002付与200
0000000002利用100
0000000003付与50
ポイント履歴一覧取得イメージ


これらの課題に直面した場合には、CQRSの導入を検討します。

詳細はこちらの記事をご覧ください。

コードで学ぶCQRS〜DDD実践のためのきほん〜


ドメインモデリングでドメインを抽象化する

DDDで登場する設計テクニックをコードを使った

コーディングができるようになったら、


ドメイン分析〜モデリング〜コーディング

を回しながら抽象化の練習と

モデルより良く洗練させる体験をしていきましょう。


まずは、松岡さんのSUDOモデリングを

実際に自分自身で体験しながらコツを掴むのがオススメです。


僕もまずは松岡さんの真似からスタートして、

現場のソフトウェアのコアドメインを同じように、

ドメインエキスパートと一緒にモデリングしながら

DDDを部分的に適応して保守性と機能性を向上させていきました。


ある程度複雑なドメインをテーマに

ドメインモデリングの練習ができるコンテンツ作成中です・・・


おまけ

僕がDDDについて学習を始めた頃の試行錯誤や気づき、

現場でDDDを取り入れる際の試行錯誤や挫折などを

記事や動画でまとめたので興味がある方は

是非ご覧ください。

ドメイン駆動設計のモデリング練習|データベーススペシャリストの過去問を題材に



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

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