本プロジェクトでは、成瀬允宣氏著の「ドメイン駆動設計入門」のLaravel 10を用いた実装例を示します。
当該書籍では、ドメイン駆動設計(Domain Driven Deplopment, DDD)を用いたWEBアプリケーションの開発例が示されており、素晴らしい著作であることは言うまでもありません。
しかしながら実装はC#で示されているため
、例えばPHPフレームワークの代表例であるLaravelなどでDDDによる実装を行いたい場合には、具体的な実装例が分かりづらくなってしまいます。
そこで本プロジェクトでは、「ドメイン駆動設計入門」のLaravelによる実装例を示すことで、Laravel開発者のDDD実装の手助けとなることを目指します。あくまでLaravelの実装例を示すことを目的としていますので、ドメイン駆動設計とは何かについては書籍をお読みください。
これが皆様の開発の手助けとなれば幸いです。ご意見等ございましたら、コメント欄やIssueでお伝えいただければと思います。
目次
Githubにソースコードはアップ済みです。
- Chapter 0: 開発環境のセットアップ -> ここ
- Chapter 1: ドメイン駆動設計とは -> 書籍をお読みください。
- Chapter 2: システム固有の値を表現する「値オブジェクト」
- Chapter 3: ライフサイクルのあるオブジェクト「エンティティ」
- Chapter 4: 不自然さを解決する「ドメインサービス」
- Chapter 5: データにまつわる処理を分離する「リポジトリ」
- Chapter 6: ユースケースを実現する「アプリケーションサービス」(TDD)
- Chapter 7: 柔軟性をもたらす依存関係のコントロール (TDD)
- Chapter 8: ソフトウェアシステムを組み立てる (TDD)
- Chapter 9: 複雑な生成処理を行う「ファクトリ」(TDD)
- Chapter 10: データの整合性を保つ (TDD)
- Chapter 11: アプリケーションを1から組み立てる (TDD)
- Chapter 12: ドメインのルールを守る「集約」(TDD)
- Chapter 13: 複雑な条件を表現する「仕様」(TDD)
- Chapter 14: アーキテクチャ (TDD)
- Chapter 15: ドメイン駆動設計のとびらを開こう (TDD)
前提条件
本プロジェクトでは、Docker上で作業を行います(Dockerの知識は必要ありません)。
Docker上で作業する際、Visual Studio CodeのDev Containers 拡張機能を使用すると開発が便利になりますので、
Visual Studio Codeと拡張機能のインストールを推奨します。
また、PHPとPHPのパッケージマネージャーであるComposerをローカルマシンにインストールしておく必要があります。
Chapter 0: Laravel及びDocker環境のセットアップ
まずは、LaravelとDockerの開発環境を構築していきましょう。
以下でlaravel v10.0のプロジェクトをsrcフォルダ内に作成します。
composer create-project laravel/laravel src 10.0 --prefer-dist
srcフォルダに移動し、sailをインストールします。
これにより、Docker上での作業を行うとができます。
また、php artisan sail:install --devcontainer
で--devcontainer
オプションをつけることにより、
Visual Studio CodeのDev Containersの設定フォルダがsrc/.devcontainer
に作成されます。
これにより、開発がかなり便利になります。
cd src
composer require laravel/sail --dev
php artisan sail:install --devcontainer
rootディレクトリに戻り、srcディレクトリをVisual Studio Codeで開き直します。
cd ..
code src
Visual Studio CodeのCommand Paletteを開き、Dev Containers: Reopen in Container
をクリックすると、Docker上でコードの編集を行うことができます。
以下でサーバーを立ち上げます。
php artisan serve
表示されたlocalhostのURLをブラウザで立ち上げ、Laravelのページが表示されていれば、セットアップ完了です。
INFO Server running on [http://127.0.0.1:8000].