diff --git a/README.md b/README.md index 9409a991..8a756700 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ - [x] 시간 조회, 추가, 삭제 기능 추가 - [x] DB 초기 값 설정 ### 9단계 -- [x] 해당 시간이 존재하는 예약이 남아있으르때, 시간 삭제 못하도록 예외처리 +- [x] 해당 시간이 존재하는 예약이 남아있을 때, 시간 삭제 못하도록 예외처리 - [x] 중복된 시간(시간의 time값이 같은) DB에 저장하지 못하도록 예외처리 ### 10단계 @@ -14,16 +14,26 @@ - 프로젝트 구조:
[도메인 우선 vs 레이어 우선](https://codewithandrea.com/articles/flutter-project-structure/)
- +우선 프로젝트 구조를 잘 가져가면 가져올 수 있는 효과가 무엇이 있는지 궁금합니다 +미션처럼 크기가 작은 프로젝트에서는 레이어 구조 또한 괜찮은 방향 같지만 서비스 크기가 +큰 앱을 개발하는데 있어서는 도메인 단위로 나누는 것이 프로젝트으 복잡성을 줄일 수 있게 되는거 같습니다. +그러나 도메인 단위로 나뉘게 된다면 중복된 Entity(테이블이 서로 연관되어 있을 가능성이 크기 )에 대한 관리를 어떻게 하는지 궁금합니다! [Repository 계층, 도메인과 영속성 엔티티 사이의 간극](https://kokodakadokok.tistory.com/entry/Repository-%EA%B3%84%EC%B8%B5-%EB%8F%84%EB%A9%94%EC%9D%B8%EA%B3%BC-%EC%97%94%ED%8B%B0%ED%8B%B0-%EC%82%AC%EC%9D%B4%EC%9D%98-%EA%B0%84%EA%B7%B9-%EB%A7%A4%EA%BE%B8%EA%B8%B0)
스프링은 기술적으로 편의를 위해서? 데이터베이스 테이블과 Java의 class를 매핑해준 Jpa 기술을 사용하는 것으로 알고 있습니다. -@Entity라는 annotation을 사용하여 정의하는 Class는 Domain과의 간극이 - -- Entity 패키지를 따로 둔 이유?
-Service는 +Jpa의 @Entity라는 annotation을 사용하여 정의하는 Class는 Domain과의 간극이 존재한다고 +생각합니다. 아직 이 간극에 대해 완벽히 알지 못하여서 Entity와 Domain을 혼돈해서 사용 +하게 되는거 같습니다. 최소한 Service를 나눌때 Domain기준으로 나누고 싶은데 +Entity(Table)단위로 나뉘게 되는 경향이 강한거 같습니다! +지금은 TimeService와 ReservationService가 나뉘어져 있지만 +TimeService와 ReservationService가 하고 있는 역할은 결국 예약이라는 하나의 도메인에 속한다는 생각이 들어 +이 둘을 하나의 ReservationService로 합할까 고민하게 되었습니다. + +- Entity 패키지를 따로 둔 이유
+제가 따로 Entity 패키지를 분리한 이유는 Service, Repository, Contoller(controller에서 dto를 entity로 변환하기에) 모두다 +Entity를 바라보기 때문에 분리하게 되었습니다. ## JDBC diff --git a/src/main/java/roomescape/entity/Time.java b/src/main/java/roomescape/entity/Time.java index b169018d..f8bebf14 100644 --- a/src/main/java/roomescape/entity/Time.java +++ b/src/main/java/roomescape/entity/Time.java @@ -1,6 +1,7 @@ package roomescape.entity; import java.time.LocalTime; +import java.util.Objects; public class Time { private Long id; @@ -26,4 +27,17 @@ public Long getId() { public LocalTime getTime() { return time; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Time time = (Time) o; + return Objects.equals(id, time.id); + } + + @Override + public int hashCode() { + return Objects.hashCode(id); + } } diff --git a/src/test/java/roomescape/CoreStepTest.java b/src/test/java/roomescape/CoreStepTest.java index e16cae2e..87bf9261 100644 --- a/src/test/java/roomescape/CoreStepTest.java +++ b/src/test/java/roomescape/CoreStepTest.java @@ -25,7 +25,7 @@ public class CoreStepTest { @Test void 팔단계() { Map params = new HashMap<>(); - params.put("time", "10:00"); + params.put("time", "14:00"); RestAssured.given().log().all() .contentType(ContentType.JSON)