
html의form으로 넘어오는값들을 받는 역할을 하는객체
Entity 직접 사용
Form으로 넘어오는 값이Entity와 일치하지 않거나값 검증을 해야하면Entity 내부에처리 로직이 늘어난다
-->Entity가화면에 종속적으로 변함
-->유지보수 힘듬
Form 객체 사용
화면 계층과서비스 계층을 명확하게분리 가능@NotEmpty처럼검증하는 로직이Entity에 영향을 주지X
- 정리
Form을 받기 위한 객체를 생성해야하는귀찮음을 감수해서라도안전하게Entity를 관리하기 위해Form 객체를 사용하자
회원
회원 등록회원 목록 조회
상품
상품 등록상품 목록 조회상품 목록 수정
주문
주문 등록주문 목록 조회 (+검색)
[ MemberForm ]
회원 등록 Form에서 정보를 받는Form 객체javax.validation에 있는@NotEmpty를 사용해서 넘어오는 데이터의필수속성을 지정
(지정한필드가 넘어오지 않으면오류를 발생시킴!)
[ MemberController ]
( 회원 등록 )
- 설명
GET /members/new
:회원 등록 폼으로 보내는 것
(/resources/templates/members/createMemberForm.html에 매칭)POST /members/new: 입력받은 회원 정보를 저장하는 것
BindingResult로예외가 발생했을 때검증하고대처할 수 있음Entity에Setter를 개방하는 것은위험-->생성자로 대체
(수정이 일어나는 부분을추적하기어려워짐)
( 회원 목록 조회 )
- 설명
GET /members
:모든 회원 목록을조회해서View로 보내준다
- 주의
- 실무에서는
Entity를 반환하지 않고DTO를생성한 후에 반환한다
-->Entity에 있는모든 데이터가 필요한 것이 아니며,보안상 위험함
[ BookForm ]
- Item들중 예시를 간단하게 하기 위해서
Book만 사용하는 Form을 제작상품 수정을 위해서Form에id값이 있어야 함
[ ItemController ]
( 상품 등록 & 조회 )
- 설명
GET /items/new
:상품 등록 Form이 있는View로 보냄POST /items/new
:입력받은 상품의 정보를form을 통해 받아서 저장GET /items
:모든 상품을조회해서 리스트를View에 반환
(역시실무에서는Entity 반환이 아닌DTO를 사용해야 함)
( 상품 수정 )
- 설명
GET /items/{itemId}/edit
:itemId에 해당하는수정 View로 보내줌
(수정 View니까기존 값을조회)
(Spring에서는Params를@PathVariable("이름")으로 가져옴)POST /items/{itemId}/edit
:itemId에 대한 값을입력받은 값으로수정
- 주의
Entity어설프게 사용X
:form에서 받은 정보를 저장할 때Entity를 만들어서 저장하는 것 보다는
DTO를 따로 만들어서 전달하거나,필요한 데이터만 받는 메서드를생성해서 넘기자
(Entity의Setter는닫힌채로 설계하는 것이 좋기 때문)수정을 위해 생성한 객체는 현재영속성 컨텍스트가관리하지 않는준영속 객체
--> 즉,변경감지(Dirty Checking)이 수행되지 X
--> 변경할식별자 값을 통해조회(findOne)한 후에값을 수정하면변경감지일어남
[ OrderController ]
(주문 등록)
- 설명
GET /order
:주문 등록 View에서 필요한members와items조회 후 View로 이동POST /order
:입력받은 주문 내용으로주문을 생성하는 것
(주문 목록 조회+검색 / 상태 변경)
- 설명
GET /orders
: 사용자의 검색에 따라order들을 처리하는 로직POST /orders/{orderId}/cancel
:orderId에 해당하는주문을 삭제처리하는 로직
OrderSearch객체 필드쿼리스트링매칭
:OrderSearch를 통해 검색에 필요한name,orderstatus를 매핑해서쿼리스트링으로 값을 넘겨준다