feat : SOLID - ISP 샘플 코드 구현
This commit is contained in:
@@ -37,6 +37,16 @@
|
||||
|
||||
- 좌표를 입력하면 해당 좌표로 이동수단의 위치가 변한다.
|
||||
|
||||
### ISP(Interface Segregation Principle)
|
||||
|
||||
- 인터페이스 분리 원칙
|
||||
- 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
|
||||
|
||||
#### 구현 요구사항
|
||||
|
||||
- 영화 상영관 좌석 현황을 조회할 수 있다.
|
||||
- 영화표 예매를 진행할 수 있다.
|
||||
|
||||
## 참고자료
|
||||
|
||||
- [SOLID (객체 지향 설계)](https://ko.wikipedia.org/wiki/SOLID_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%EC%84%A4%EA%B3%84))
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.solid.isp.after
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.Reservation
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.SeatStatus
|
||||
import org.springframework.web.bind.annotation.GetMapping
|
||||
import org.springframework.web.bind.annotation.PostMapping
|
||||
import org.springframework.web.bind.annotation.RequestMapping
|
||||
import org.springframework.web.bind.annotation.RestController
|
||||
|
||||
@RequestMapping("/cinemas")
|
||||
@RestController
|
||||
class CinemaControllerAfter(
|
||||
private val seatStatusService: SeatStatusServiceAfter,
|
||||
private val reservationService: ReservationServiceAfter
|
||||
) {
|
||||
@GetMapping("/with-isp-get-seat-status")
|
||||
fun getSeatStatus(): SeatStatus {
|
||||
return seatStatusService.getSeatStatus()
|
||||
}
|
||||
|
||||
@PostMapping("/with-isp-make-reservation")
|
||||
fun makeReservation(): Reservation {
|
||||
return reservationService.makeReservation()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.solid.isp.after
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.Reservation
|
||||
|
||||
interface ReservationService {
|
||||
fun makeReservation(): Reservation
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.solid.isp.after
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.Reservation
|
||||
import org.springframework.stereotype.Service
|
||||
|
||||
@Service
|
||||
class ReservationServiceAfter : ReservationService {
|
||||
override fun makeReservation(): Reservation {
|
||||
return Reservation(seat = "A1", id = 1L)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.solid.isp.after
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.SeatStatus
|
||||
|
||||
interface SeatStatusService {
|
||||
fun getSeatStatus(): SeatStatus
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.solid.isp.after
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.SeatStatus
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.SeatStatusType
|
||||
import org.springframework.stereotype.Service
|
||||
|
||||
@Service
|
||||
class SeatStatusServiceAfter : SeatStatusService {
|
||||
override fun getSeatStatus(): SeatStatus {
|
||||
return SeatStatus(SeatStatusType.CAN_RESERVATION)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.solid.isp.before
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.Reservation
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.SeatStatus
|
||||
import org.springframework.web.bind.annotation.GetMapping
|
||||
import org.springframework.web.bind.annotation.PostMapping
|
||||
import org.springframework.web.bind.annotation.RequestMapping
|
||||
import org.springframework.web.bind.annotation.RestController
|
||||
|
||||
@RequestMapping("/cinemas")
|
||||
@RestController
|
||||
class CinemaControllerBefore(
|
||||
private val seatStatusService: SeatStatusServiceBefore,
|
||||
private val reservationService: ReservationServiceBefore,
|
||||
) {
|
||||
@GetMapping("/none-isp-get-seat-status")
|
||||
fun getSeatStatus(): SeatStatus {
|
||||
return seatStatusService.getSeatStatus()
|
||||
}
|
||||
|
||||
@PostMapping("/none-isp-make-reservation")
|
||||
fun makeReservation(): Reservation {
|
||||
return reservationService.makeReservation()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.solid.isp.before
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.Reservation
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.SeatStatus
|
||||
|
||||
interface CinemaService {
|
||||
fun makeReservation(): Reservation
|
||||
|
||||
fun getSeatStatus(): SeatStatus
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.solid.isp.before
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.Reservation
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.SeatStatus
|
||||
import org.springframework.stereotype.Service
|
||||
|
||||
@Service
|
||||
class ReservationServiceBefore : CinemaService {
|
||||
override fun makeReservation(): Reservation {
|
||||
return Reservation(seat = "A1", id = 1L)
|
||||
}
|
||||
|
||||
override fun getSeatStatus(): SeatStatus {
|
||||
throw UnsupportedOperationException("좌석 현황 조회는 지원하지 않습니다.") // 불필요함에도 불구하고 구현해주어야 한다.
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.solid.isp.before
|
||||
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.Reservation
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.SeatStatus
|
||||
import com.banjjoknim.soliddesignpatternsample.solid.isp.common.SeatStatusType
|
||||
import org.springframework.stereotype.Service
|
||||
|
||||
@Service
|
||||
class SeatStatusServiceBefore : CinemaService {
|
||||
override fun makeReservation(): Reservation {
|
||||
throw UnsupportedOperationException("영화표 예매는 지원하지 않습니다.") // 불필요함에도 불구하고 구현해주어야 한다.
|
||||
}
|
||||
|
||||
override fun getSeatStatus(): SeatStatus {
|
||||
return SeatStatus(SeatStatusType.CAN_RESERVATION)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.solid.isp.common
|
||||
|
||||
import javax.persistence.Entity
|
||||
import javax.persistence.Id
|
||||
|
||||
@Entity
|
||||
class Reservation(
|
||||
val seat: String,
|
||||
@Id
|
||||
val id: Long = 0L
|
||||
)
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.solid.isp.common
|
||||
|
||||
data class SeatStatus(
|
||||
val type: SeatStatusType
|
||||
)
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.solid.isp.common
|
||||
|
||||
enum class SeatStatusType {
|
||||
CAN_RESERVATION,
|
||||
CANNOT_RESERVATION
|
||||
}
|
||||
Reference in New Issue
Block a user