DDD、CQRS(+ES)まわりの実装、参考ページまとめ

2016.05.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

弊社で開発するモバイルバックエンドのサーバサイドAPIアプリケーションコード (Play framework + Scala) はビジネスロジックを担う主要なパッケージである services, domains が外部のインフラやAPIインターフェイスに直接依存しないようなパッケージ構成をとっています。(Clean Architecture

services, domains の構成についてはDDDの経験が浅く、まだまだ改善の余地があると考えており、今後どうしていくか考えていくにあたって参考になるであろうページをまとめてみました。

尚、DDDまわりにおける筆者の現在の知識はドメイン駆動設計の第二部までを読み終わり、第三部を読み始めた程度です。

DDDと関連のあるCQRS+ES(Command and Query Responsibility Segregation + Event Sourcing)についても興味が向かったので、そちらも参考になったページをまとめてみました。

DDDまわり

Scala with DDD - Slideshare

かとじゅんさんのスライド

ScalaでDDDを実践した時にどのようなソースコードで実現されるかを垣間見れます。

DDDに役立つScalaの関数型プログラミング的機能 - Qiita

ドワンゴの中の人の記事

フィールドの型に何を選ぶかでエンティティの性質を表現したり、サービスの表現の仕方等、Javaとの対比で書かれています。

戦術的DDD基本原則まとめ - Qiita

ドメイン駆動設計本二部の記述内容まとめ

[ 技術講座 ] Domain-Driven Designのエッセンス -目次-|オブジェクトの広場

オージス総研さんのまとめ

ドメイン駆動設計を軽快に実践するための工夫  - speakerdeck

関西DDD.java主催の人のスライド

DDDSample - Github

ドメイン駆動設計本の例に出てくる貨物処理アプリケーションのJava実装例

dddsampleのパッケージ以下に本の例に対応したJavaコードの実装があります。

Is Domain Driven Design(DDD) only tied to software built with Object Oriented Languages? - Quora

ドメイン駆動設計がオブジェクト指向言語向けの概念かどうかを議論したトピック

ベストアンサーがドメイン駆動設計のなんたるかを要約してくれています。

関数型言語でDDDができないかを調べる過程でみつけました。

DDD の Java EE 実装サンプル - Cargo Tracker を読み解く  - Qiita

上記実装の日本語解説

CQRS+ESまわり

[CQRS][DDD][Java][Scala] 副作用を最小限に抑えるために必要なこと

再びかとじゅんさんの記事

CQRSというものが導入されるに至った経緯についてまとまってます。Javaコード例も添えられてるのでわかりやすいです。

イベント・ソーシングを知る - Slideshare

CQRS+ESのESの部分についてまとまったスライド

Event Sourcingの概要をざっくりつかむ際に参考になりました。

play-CQRS-ES - Github

play + akkaでCQRS+ESを実装した例

Playに馴染みのある人には、Akka+CQRSから入るよりも敷居が低いかもしれません。

余談

本記事は社内向けに書いたまとめを外部向けにアレンジしたものです。Blogを書くワークフローとして初の試みでしたが、はじめからガッツリBlogに入るよりは筆を走らせやすい感触を持っています。