このリポジトリはなに?

ScalaでDDDを実践したり、テスタビリティの高いコードを書いてみたりするサンドボックス的な実験的なサンプルwebアプリ。 ユーザーの追加や、セッションの管理ができる

レイヤー構成

上位の層は層一つ一つがsbtのプロジェクトとなるマルチプロジェクト構成。

  • Interface層
  • Application層
    • Service層
    • Scenario層
  • Domain層
  • Query層
  • Infrastructure層

Interface層

要するにControllerを指す。ユーザーからのインプットを受け取ったり、アウトプットを返す。DIもここで制御する。

Application層

ユースケースを表現する層。リポジトリを呼び出したり、トランザクションを制御するのもこの層。書き込み処理にしか使わない。

Service層

Transactionという外部リソースのIOを抽象化したモデルを返す。

Scenario層から再利用されることを想定しているのでTransactionを合成することは原則しない。

Scenario層

Resultというひとつの処理の結果を抽象化したモデルを返す。 Service層のメソッドを複数呼び出してTransactionを合成してもよい。 原則再利用を想定しない。

Domain層

エンティティと依存性逆転のためリポジトリインターフェイスを内包する。 CQRSの書き込み処理時にしか基本使わない

Query層

CQRSの読み込み処理時にしか使わない層。Interface層から直接呼び出される

Infrastructure層

Domain層のRespositoryとTransactionを実装する。