서비스 계층 및 컨트롤러: 무엇을 담당합니까?
수업에서는 스프링이 직접 관련되지는 않지만 DAO 및 서비스 계층 객체의 인터페이스를 만드는 방법을 배웠습니다.
제가 틀렸다면 고쳐주세요: DAO 계층은 매우 추상적입니다: 그것은 단지 CRUD 연산을 포함하고 있고 데이터를 읽는 데 추가로 사용됩니다.(즉, 모든 객체 가져오기, 특정 객체 가져오기 등)
서비스 계층: 비즈니스 논리가 있어야 하는 부분은 무엇인가를 만들고 무엇인가를 삭제하는 서비스입니다.
이제 서비스 계층에서는 개체를 "업데이트"하는 것을 제외하고 이 모든 것이 의미가 있습니다.당신은 단지 당신의 데이터베이스에 객체를 저장하는 "업데이트" 기능을 넣습니까?아니면 거기서도 논리를 정의할 필요가 있습니까?이것이 제가 혼란스러워하는 부분입니다. 제가 이해하는 바는 봄에 있는 물건들은 그저 PoJO의 것입니다.그러면 누가 데이터를 검증합니까?
개체 "자녀"가 있다고 가정합니다.Name
,SurName
,Gender
,Photo
,Birthdate
밭서비스 이름을 어떻게 지을까요?아니면 컨트롤러가 검증 작업을 맡도록 해 주시겠습니까? 제가 보기엔 옳지 않은 일입니다.한편, 서비스 계층에 호출해야 하는 모든 설정자를 위임하는 것도 옳지 않은 것 같습니다.
기본적으로 서비스 계층을 통해 객체를 저장하는 방법을 정의할 수 있습니다.
일반적으로 Spring 서비스는 트랜잭션입니다.동일한 트랜잭션에서 함께 그룹화되어야 하기 때문에 특정 서비스 방법에 포함됩니다.데이터베이스에서 개체를 검색하고, 개체를 전환한 후 새 버전을 저장하려면 검색과 저장이 동일한 서비스 방법으로 이루어져야 합니다.따라서 사용자를 위해 애플리케이션이 수행해야 하는 작업에 따라 서비스 방법이 결정됩니다.
저는 컨트롤러가 http 매개 변수 검증과 관련된 작업을 수행하도록 제한하고, 어떤 매개 변수로 호출할 서비스 방법, https 세션이나 요청에 무엇을 넣을 것인지, 리디렉션 또는 전달할 뷰 또는 유사한 웹 관련 작업을 수행하도록 제한하려고 합니다.
검증에 관한 한: 컨트롤러의 입력 매개 변수를 검증하는 것은 아무도 가짜 입력으로 애플리케이션을 파괴할 수 없도록 하는 데 좋은 일입니다.컨트롤러의 유효성 검사는 입력이 구문적으로 정상인지 확인하는 것(주입 공격 탐지 포함)인 반면, 서비스 수준 유효성 검사는 데이터베이스의 상태가 예상대로인지 확인하는 것입니다.
따라서 컨트롤러에는 웹 프레임워크 인프라 코드가 포함되고, 서비스에는 애플리케이션 로직 코드가 포함됩니다.
으로 유지할 수 다음과 같이 .Child
객체, 그러면 전통적으로 당신은 서비스에서 다음과 같은 이름의 방법을 가질 것입니다.ChildService.update(Child newchild)
새 버전의 이 자식을 유지하기 위해 올바른 DAO를 호출하는 작업을 처리합니다.
컨트롤러는 자유롭게 서비스에 하위 항목을 요청하고 주변 필드를 변경할 수 있습니다(일부 사용자 입력을 기반으로 함). 정상적인 설계는 컨트롤러가 하위 POJO와 작업을 수행한 다음 서비스에 변경 사항을 지속하도록 요청합니다. 못하고 . 이 "POJO", "DAO"로 전송되는 것은 입니다. 물론 모든 통화를 원하지는 않을 것입니다.setName()
또는setGender()
자동으로 데이터베이스 업데이트를 수행합니다.
및가 "/또는" "/또는 "" " " "를 .Child
개체를 작업 단위의 개체에 대해 필요한 작업을 수행한 다음 서비스(그리고 DAO)에 변경 사항을 지속하도록 요청합니다.
검사는 될 수 . 유효성 검사를 수 있으며, 는 유효성 수 . 컨트롤러는 웹 사용자의 입력을 유효성 검사하고 서비스는 유효성 검사를 원할 수 있습니다.Child
개체를 유지하기 전에 개체입니다.특히 REST 인터페이스 노출, 다른 프런트 엔드 노출 등과 같은 다른 용량에서 본 서비스를 재사용하려는 경우 두 계층 모두에서 어느 정도의 검증 수준을 갖추는 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/3885675/service-layer-and-controller-who-takes-care-of-what
'programing' 카테고리의 다른 글
최대 절전 모드가 필드에 잘못된 유형을 설정하려고 합니다(Spring Data JPA). (0) | 2023.07.26 |
---|---|
lazy-init에 대한 스프링 기본 동작 (0) | 2023.07.26 |
스프링 자동 배선 aop 원형 종속성 (0) | 2023.07.26 |
봄에 내 인증 필터 내에서 서비스를 자동 배선할 수 없음 (0) | 2023.07.26 |
Angular 2의 요소에 RouterLink 또는 다른 속성 지시어를 조건부로 추가합니다. (0) | 2023.07.26 |