ドメイン駆動設計におけるドメインモデルとリポジトリの関係
ドメイン駆動設計の情報を漁っているとドメインモデルにリポジトリへ保存するメソッドを持たせていたりするコードを見かけたことがあります。
たとえば以下のようなコードです。
case class User (id: Long, name: String, age: Int)(userRepository: UserRepository) {
def save()(implicit ctx: ExecutionContext) = {
userRepository.save(this)
}
}
しかし、果たして永続化という行為はドメインモデルに持たせるものなのでしょうか?
私の認識ではアプリケーション層のアプリケーションサービスがトランザクション制御の役割をになってアプリケーションサービスで
class UserService @Inject()(userRepository: UserRepository) {
def regist(userCreateForm: UserCreateForm) = {
// IdGeneratorというID生成器があると仮定
val user = User(IdGenerator.nextId(),userCreateForm.name, userCreateForm.Age)
userRepository.save(user)
user
}
}
という形であるべきなのでは?というように思っていますがDDDではどうあるべきなのでしょうか?