Show
- movie
- time
Screen
- seats
Seat
- id
- status
BookingService
+ book(seats, user)
SeatLock
- ttl
- heldBy
+ lock(seats)
+ unlock()
Booking
- seats
- user
Model the booking domain
1class Show { Movie movie; Screen screen; Time time; }2class Screen { List<Seat> seats; }34class BookingService {5 SeatLock lock;6 Booking book(List<Seat> seats, User user) { ... }7}
State
Showmovie + screen + time