/backend/tweetable/ddd-util
に実装がある
このライブラリを使わなくなった時になるべく依存や継承を消せばそのままコンパイルが通るように設計した
機能としては
- 集約ルートEntityからではないとEntityを永続化できないようにしている
- Repositoryの実装の型パラで制約を課している
- 集約ルートEntityは集約ルートEntityを持てない
- AggregateRootCheckでコンパイル時に落とせる
などがある
Transactableの集約があり直接DDDとは関係ないが、これを利用することによってトランザクション
を集約と意識する事ができる
非CQRS + ES ならcommand側だけこのライブラリを利用してquery側はパフォーマンスの良いクエリを書けば利用できる(と思う)
CQRSはあんまり理解していないので対応しているか分からない。メッセージキュー周りと結果整合がなぜできるのかが分からない...
https://github.com/j5ik2o/scala-ddd-base このrepositoryのより厳格な抽象のみを提供するイメージ
ddd-util
、またサンプルアプリではscala3での機能を利用している
- macro
- typed lambda
- 新しいimplicit
- inline base syntax
- scala3用のscalafmtの設定 など
ツイッターっぽいSNSのバックエンド。
- TweetEntity, UserEntityなど
- 集約ルートEntityの実装
- FollowEntity, FavoriteEntityなど
- Entityの実装
- TweetRepository
- Tweet集約の永続化を行う
- TweetCrudUseCase
- DDDに置けるサービスの中で特にReoisitoryの実装を直接叩けば良いものの実装
- TweetService
- DDDに置けるサービスの中で他の集約の値やバリデーションなど複雑な処理が必要なものの実装
- httpclientのからこのクラスのメソッドを呼ぶイメージ
evolutions
を利用
- flywayっぽいOSSのマイグレーションツール。playframeworkで利用されている。無料だとflywayはロールバックできないのでこっちの方が良いかも?
tweetable-driverに実装予定
- ログイン情報を保持するcookieの管理など
### その他色々
TweetRepositoryImplのtestなのであんまりおもしろくない...
docker compose up -d
cd backend/tweetable/
sbt evolutions/run #migration
sbt test #testの実行