DDD、CQRS(+ES)まわりの実装、参考ページまとめ
はじめに
弊社で開発するモバイルバックエンドのサーバサイド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に入るよりは筆を走らせやすい感触を持っています。