저장소와 서비스의 차이점은 무엇입니까?


106

리포지토리와 서비스의 차이점은 무엇입니까? 나는 그것을 이해하지 못하는 것 같다.

저는 일반적으로 linq to sql을 사용하여 데이터 액세스 계층을 통한 데이터 액세스에 대해 이야기하고 있습니다.

매우 자주 간단한 CRUD 방법이있는 저장소와 더 많은 비즈니스 특정 방법이있는 서비스를 봅니다.

우리는이 걸릴 수 있습니다 예를 들어 블로그 게시물을. 하단의 인터페이스 (이미지)를 보면 두 개의 저장소와 두 개의 서비스가 있습니다. 어디에 무엇을 넣을지 어떻게 압니까?

내가 말했듯이 리포지토리는 CRUD와 유사한 운영 및 서비스에 대한 비즈니스 지향적 인 것 같습니다.

감사


당신은 칭찬 할 수 있습니까? 어떤 맥락에서? 대부분의 단어와 마찬가지로 이러한 단어가 사용되는 문맥은 의미를 정의하는 데 도움이됩니다.
David

2
참고 : 여기서는 웹 서비스 나 다른 것에 대해 말하는 것이 아닙니다. 저는 데이터 레이어를 통한 데이터 액세스에 대해 이야기하고 있습니다.
alexn

답변:


78

Repository는 본질적으로 Collection 스타일 의미론 (Add, Update, Remove)을 사용하여 데이터 / 객체에 대한 액세스를 제공 하는 지속성 을 위한 파사드입니다 . 이는 애플리케이션의 나머지 부분에서 데이터 / 객체를 저장하는 방식을 분리하는 방법입니다.

서비스는 애플리케이션을 운영하는 데 필요한 조정 또는 기타 "서비스"를 제공합니다. 서비스는 일반적으로 지속성에서 데이터에 액세스하는 방법을 모르고 저장소는 일반적으로 보유 할 수있는 모든 서비스의 데이터 / 객체 에만 액세스 한다는 점에서 매우 다릅니다 .


19
리포지토리는 데이터 액세스에 사용되는 서비스 유형이라고 말하고 싶습니다.
Ian Ringrose

5
그것은 우리가 작성하는 거의 모든 것이 어떤 수준에서는 "서비스"라는 점에서 훌륭한 정의이지만, 저장소가 객체 의 모음 이어야한다는 기본 의도를 잃어 버립니다 .
jlembke

4
단위 테스트를 진행한다면 데이터베이스를 피하는 데 필요한 조롱을 최소화하기 위해 저장소를 최소한의 추상화로 생각하는 것이 더 명확 할 수 있습니다.
Henry Heikkinen 2015-04-07

repository= collection에서 backbone.js또는 repository= service에서 angular?
slideshowp2

160

저장소는 데이터가 저장되는 곳입니다. 서비스는 데이터를 조작하는 것입니다.

실제 상황 비교에서 돈이 은행의 금고에 저장되어 있다면 금고가 저장소입니다. 입금, 출금 등을하는 창구가 서비스입니다.


7
이 답변에 감사드립니다! 간단하고 간결합니다.
alexn

1
위의 의견에 동의했습니다! 실제 세계 설명도 좋아합니다!
Kleigh

6
mm. 따라서 은행이 금고를 없애고 돈을 모금하기로 결정한 경우에도 창구 직원은 저장소 계층의 변경 사항에 대해 알 필요없이 이전과 같이 귀하와 상호 작용할 것입니다.
Dennis

1
고객이 그 구현에 대해 알고 싶어 할 것 같은데요, @Dennis
Chucky

1
@Dennis 네. 이것은 실제로 저장소 패턴 사용의 주요 이점 중 하나입니다. 서비스에서 아무것도 변경하지 않고 저장소 인터페이스의 실제 구현을 변경할 수 있어야합니다. 이것은 단위 테스트와 코드를 느슨하게 결합하는 데 큰 이점이 있습니다.
Warren Parks

12

나는 일반적인 의미에서 첫 번째 시도로 말할 것입니다 (당신이 더 많은 맥락을 제공 할 때까지) :

  • 저장소는 나중에 사용할 수 있도록, 일부 글로벌 물건을 올려 곳입니다.
  • 서비스는 비즈니스 로직 코드를 명시했다 (그리고 이상적으로 프리젠 테이션 계층 및 데이터베이스 계층에서 분리?)

3
다음을 수행해도 괜찮을까요? 내 저장소에는 모든 복잡한 데이터베이스 호출이 있으며 내 서비스에서 저장소를 종속성으로 삽입합니다. 이제 내 서비스는 DB 호출이 수행되는 방식을 모르고 단순히 수행하는 리포지토리의 기능을 호출하기 때문에 쉽게 테스트 할 수있는 코드를 사용하고 우려 사항을 분리했습니다. 따라서 비즈니스 로직과 데이터 액세스가 분리됩니다. 이것이 실행 가능한 접근 방식일까요?
darophi

1
모든 로직이 서비스에 작성되면 컨트롤러는 서비스 만 호출합니까?
Islomkhodja Hamidullakhodjaev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.