애플리케이션에 서비스 레이어를 생성해야 하는 좋은 이유
엔터티 계층의 이유는 매우 간단합니다. 응용 프로그램에서 엔터티의 필드(및 해당 유형)를 선언해야 합니다. 일부 애플리케이션에서는 엔티티 클래스에서 데이터베이스 스키마를 설명할 수도 있습니다. 리포지토리 계층에 쿼리를 배치하고 이를 사용하여 데이터를 검색하는 반면 컨트롤러에는 각 경로 및 HTTP 메서드에 대한 핸들러가 포함됩니다. 그러나 서비스는 어떻습니까?
내 저장소 앞에 서비스 계층이 있어야 한다는 필요성을 충족시키는 것 외에는 아무 용도가 없는 것처럼 보이는 서비스 클래스가 가끔 있습니다.
나는 최근에 서비스 계층 클래스가 있어야 하는 큰 이유를 발견했습니다. 내가 작업하고 있던 프로젝트에는 명확하게 정의된 서비스 레이어가 없었습니다. 다른 리포지토리에서 데이터를 가져오고 처리하고 결과를 반환하는 코드를 작성해야 했습니다. 이 기사의 편의를 위해 컨트롤러 클래스에서 이 코드를 처음 작성했다고 가정해 보겠습니다.
const repo1 = new Repo1()
const repo2 = new Repo2()
@rest('/demo')
class DemoController {
@get('/result')
getResult(req) {
// handler for GET /demo/result
const stuff = repo1.findById(req.body.id)
const moreStuff = repo2.findAllCreatedBefore(req.body.time)
// do some processing here
return { result }
}
}
그런 다음 다른 곳에 필요하다는 것을 깨달았고 다른 파일로 전송하고 코드를 함수로 래핑했습니다.
// process-data file
const repo1 = new Repo1()
const repo2 = new Repo2()
export function processData(id, time) {
const stuff = repo1.findById(id)
const moreStuff = repo2.findAllCreatedBefore(time)
// do some processing here
return result;
}
이제 어디서나 사용할 수 있으므로 작업이 완료되지 않았습니까? 아니, 정확히는 아니야. 한 가지 문제가 있습니다. 이 기능을 어떻게 테스트할 것인가?
함수에는 테스트를 어렵게 만드는 매개 변수의 일부가 아닌 종속성(저장소)이 있습니다. 이 함수는 내 테스트 사례에서 모의 종속성 집합을 사용해야 합니다. 이 작업을 수행하려면 어떻게 해야 합니까? 여기에 수업이 적합하지 않을까요?
// process-data file
export class DataProcessor {
private repo1
private repo2
constructor(repo1, repo2) {
this.repo1 = repo1
this.repo2 = repo2
}
processDataByIdCreatedBeforeTime(id, time) {
const stuff = this.repo1.findById(id)
const moreStuff = this.repo2.findAllCreatedBefore(time)
// do some processing here
return result;
}
}
export const processor = new DataProcessor(new Repo1(), new Repo2())
// test DataProcessor
it('should process the data correctly', () => {
const processor = new DataProcessor(mock1, mock2)
// ...some testing code
const result = processor.processDataByIdCreatedBeforeTime(id, time)
assert.equal(result, expectedResult)
})
위의 예에서 DataProcessor 클래스는 서비스 계층 클래스처럼 보이지 않습니까? 데이터 처리 논리를 테스트해야 하는 필요성으로 인해 결국 서비스 계층 클래스가 생성되었습니다. 그래서 우리는 무엇을 빼야 할까요?
이것이 제 의견입니다. 상반된 생각이 있을 수 있거나 내가 놓친 것이 있을 수 있다고 의심됩니다. 이 경우 자유롭게 의견을 공유하십시오.
읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(애플리케이션에 서비스 레이어를 생성해야 하는 좋은 이유), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eunovo/a-good-reason-to-create-a-service-layer-in-your-application-3678텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)