Slide 26
Slide 26 text
CQRSではない場合の問題(1/2)
● クエリ要件を満たすことでリポジトリが複雑になる
○ 「クエリするだけでドメインロジックを呼び出さない」はドメインの責務らし
くない。他にもページングやソートも扱うケースがある…。
● レスポンス用DTOをリポジトリで組み立てるため、N+1クエリが発生する
○ 本来RDBに任せるようなことをアプリケーション空間でやっている。リポジト
リはそもそもこのような用途には向かない
26
val employees = employeeRepository.findByDeptIdsWithEmpNamePatterns(deptIds, empNamePatterns)
// このあとに、ドメインロジックはない。
DTOに詰め直してクライアントに返すだけ。
val reservationDtos = reservationRepository.findByIds(ids) // SQL発行
.map{ reservation =>
val hotel = hotelRepository.findById(reservation.hotelId) // SQL発行
val customer = cusotmerRepository.findById(reservation.customerId) // SQL発
new ReservationDto(reservation, hotel.name, customer.name) // アプリケーション空間で結合及びデータを捨てる
}