[SPRING] 서비스 계층 및 컨트롤러 : 누가 처리합니까?
SPRING서비스 계층 및 컨트롤러 : 누가 처리합니까?
클래스에서 우리는 현재 Spring 어플리케이션을 빌드하는 방법을 배우고 있습니다. 스프링이 직접 관련되어 있지는 않지만 DAO 및 서비스 레이어 오브젝트 용 인터페이스를 작성하는 방법을 배웠습니다.
내가 틀렸다면 나를 바로 잡으세요. DAO 레이어는 매우 추상적입니다 : CRUD 작업을 포함하고 데이터를 읽는 데 더 많이 사용됩니다 (예 : 모든 개체 가져 오기, 특정 개체 가져 오기 등).
서비스 계층 : 사물을 만들고 삭제하는 서비스를 포함하며, 비즈니스 로직이 있어야합니다.
이제이 모든 것이 서비스 계층에서 의미가 있습니다. "업데이트"개체 제외. 개체를 데이터베이스에 저장하는 "업데이트"기능을 넣었습니까? 또는 논리를 정의 할 필요가 있습니까? 이것은 내 혼란이 어디서인지, 내 이해는 봄에있는 객체입니다. 단지 POJO입니다. 이제 누가 데이터의 유효성을 검사합니까?
개체 "자식"이 있다고 가정 해 봅시다. 그것이 있습니다 : 이름, 성, 성별, 사진, 생년월일 전지. 서비스 이름은 어떻게 지정합니까? 아니면 컨트롤러가 유효성 검사를하도록 내버려 두시겠습니까? 이것은 나에게 맞는 것 같지 않습니다. 반면에 호출해야 할 모든 세터를 서비스 계층에 위임하는 것이 옳지 않을 것입니다.
그래서 기본적으로 : 서비스 레이어를 통해 객체를 저장하는 것을 정의하는 방법을 알려주십시오.
해결법
-
==============================
1.컨트롤러에서 Child 객체에 대한 변경 사항을 유지할 수있게하려면 전통적으로 ChildService.update (Child newchild)와 같은 이름의 서비스 메소드가 있어야합니다.이 메소드는 올바른 DAO 호출을 처리하여 새 버전을 유지합니다. 이 아이.
컨트롤러에서 Child 객체에 대한 변경 사항을 유지할 수있게하려면 전통적으로 ChildService.update (Child newchild)와 같은 이름의 서비스 메소드가 있어야합니다.이 메소드는 올바른 DAO 호출을 처리하여 새 버전을 유지합니다. 이 아이.
컨트롤러는 아이에게 서비스를 요청할 수 있으며 (사용자 입력에 따라) 필드를 바꿀 수 있습니다. 정상적인 디자인을 사용하면 컨트롤러가 하위 POJO에서 일부 작업을 수행 한 다음 서비스에 변경 사항을 유지하도록 요청할 수 있습니다. POJO 모델은 컨트롤러, 서비스 또는 DAO에 대해 알지 못하지만 제안대로 데이터를 보유하기 만하면됩니다. setName () 또는 setGender ()를 호출 할 때마다 자동으로 데이터베이스를 업데이트하지 않아도됩니다.
대신, 컨트롤러 및 / 또는 서비스는 Child 객체를 가져 와서 작업 단위에있는 객체에 필요한 작업을 수행 한 다음 서비스 (및 DAO)에 변경 사항을 유지하도록 요청해야합니다.
유효성 검사는 여러 계층에서 발생할 수 있습니다. 컨트롤러는 웹 사용자의 입력을 확인하려고 할 수 있으며 Service는 유효한 Child 객체가 있는지 확인하기 전에 유효성 검사를 원할 수 있습니다. REST 인터페이스 노출, 다른 프런트 엔드 노출 등과 같은 다른 기능으로이 서비스를 다시 사용하려는 경우 두 계층 모두에서 일정 수준의 유효성 검사를 수행하는 것이 좋습니다.
-
==============================
2.일반적으로 스프링 서비스는 트랜잭션이다. 같은 트랜잭션에서 함께 그룹화되어야하기 때문에 특정 서비스 메소드로 이동합니다. 데이터베이스에서 객체를 검색하고 회전하고 새 버전을 저장하려면 검색 및 저장이 동일한 서비스 메소드에 있어야합니다. 따라서 서비스 방법은 사용자가 응용 프로그램에 필요한 작업에 따라 결정됩니다.
일반적으로 스프링 서비스는 트랜잭션이다. 같은 트랜잭션에서 함께 그룹화되어야하기 때문에 특정 서비스 메소드로 이동합니다. 데이터베이스에서 객체를 검색하고 회전하고 새 버전을 저장하려면 검색 및 저장이 동일한 서비스 메소드에 있어야합니다. 따라서 서비스 방법은 사용자가 응용 프로그램에 필요한 작업에 따라 결정됩니다.
컨트롤러가 HTTP 매개 변수의 유효성 검사, 매개 변수와 관련된 서비스 메소드, httpsession 또는 요청의 대상, 리디렉션 또는 전달할 뷰 또는 이와 유사한 웹 관련 정보를 결정하는 작업을 수행하도록 컨트롤러를 제한하려고합니다.
컨트롤러가 입력 매개 변수를 검증하는 것은 아무도 가짜 입력으로 애플리케이션을 깰 수 없는지 확인하는 것이 좋습니다. 컨트롤러의 유효성 검사는 입력이 구문 적으로 괜찮은지 (주입 공격 탐지 포함) 확인하는 경향이 있지만 서비스 수준 유효성 검사는 데이터베이스의 상태가 예상 한 것과 같은지 확인하는 것입니다.
따라서 컨트롤러에는 웹 프레임 워크 인프라 코드가 포함되고 서비스에는 응용 프로그램 논리 코드가 포함됩니다.
from https://stackoverflow.com/questions/3885675/service-layer-and-controller-who-takes-care-of-what by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트 액츄에이터 응용 프로그램이 Ubuntu VPS에서 시작되지 않습니다. (0) | 2018.12.08 |
---|---|
[SPRING] tomcat7 - jdbc 데이터 소스 - 메모리 누수가 발생할 가능성이 큽니다. (0) | 2018.12.08 |
[SPRING] Spring Boot에서 암시 적으로 사용하는 Jackson JSON 매퍼를 사용자 정의하는 방법은 무엇입니까? (0) | 2018.12.08 |
[SPRING] Spring XML 컨텍스트에서 조건부 리소스 가져 오기를 수행하는 방법? (0) | 2018.12.08 |
[SPRING] JPA EntityListener에 Spring 의존성 삽입하기 (0) | 2018.12.08 |