2009-08-29 5 views
13

일반적으로 MVC 아키텍처에서 서비스 레이어를 구현하는 방법은 무엇입니까? 기본 비즈니스 객체에 대한 모든 요청을 처리하는 객체입니까? 또는 다른 비즈니스 객체와 상호 작용하는 객체와 비슷합니다.MVC 아키텍처에서 서비스 레이어 구현

그래서 :

  1. 컨트롤러 -> 서비스 -> getUserById() 또는 :

  2. 컨트롤러 -> ServiceManager에 -> getUserService() -> getUserById()

또한 후자가 더 적합한 경우이 ServiceManager 객체를 부트 스트랩에 구성하겠습니까? 즉, 앱에 필요한 다양한 서비스를 부트 스트랩의 서비스 관리자에게 등록하십시오.

위의 내용 중 어느 것도 적합하지 않은 경우 서비스 계층을 구현하는 방법을 이해하는 데 도움이되는 것은 무엇입니까?

미리 감사드립니다.

답변

4

나는이 질문을 읽는 방법에있어서 정말로 두 가지가 있어야한다. 대답 :

A) "Service"를 "CustomerService"와 "OrderService"로 나누는 것을 선호합니다. 즉, 도메인 개념별로 그룹화하는 것이 좋습니다.

B) 두 번째로 의존성 삽입을 사용하여 필요한 곳에서 적절한 서비스를 얻을 수 있으므로 기본적으로 alt 1을 사용하고 있습니다. 대안 2에서 추가 된 추상화는 IoC 컨테이너 중요한 부분을합니다. 는 "외관"을 사용

+0

응답 해 주셔서 감사합니다. krosenvold. 당신에 관해서는 대답 : 가) 이해하고 동의 함 나) 중복 추상화에 대해 말하는 것을 본다. 그러나 Joel에게 다음과 같이 언급했습니다. MVC 환경에서 IoC를 구현하는 방법을 파악하는 데 어려움이 있습니다. 이것이 어디에서 발생합니까? 컨트롤러에? 이것은 어떻게 부가 가치를 제공합니까? 나는 IOC의 원칙을 잘 이해하지 못한다고 생각한다. 아니면 부트 스트랩에서도 구성하는 방법에 대해 이야기하고 있습니까? 정교한 경우 (간단한 예와 함께) I'ld 매우 감사드립니다. 감사. –

+0

의존성 주입에 대해 이해하는 핵심 개념은 효과적인 것으로 대부분의 장소에서 사용된다는 것입니다. 일반적으로 IoC 컨테이너는 인프라 수준이 매우 낮기 때문에 어디서나 통과 할 수 있습니다. – krosenvold

2

나는 개인적으로 # 2를 선호하는데, 일반적으로 부트 스트랩에 구성되거나, 특정 종류의 IoC 컨테이너를 사용하여 종속성이 해결되어 실제 구체적인 인스턴스를 제공합니다.

나는 또한 논평하고 싶습니다. 그렇습니다. 아마도 이것은 개인적인 취향에 더 가깝습니다. 이러한 개체에 "서비스"계층 이름을 사용하지 마십시오. 그것들을 리포지토리 또는 다른 것으로 참조하십시오. 당신이 서비스를 사용한다면, 그 용어는 과부하가됩니다. 왜냐하면 devs는 마치 "휴식이나 wcf 서비스 같은 의미입니까?"때문입니다. 나를 믿어 라. 우리는 최근의 프로젝트에서 그렇게했다. 코드 변경을 할 곳을 이야기 할 때 우리는 항상 혼란 스럽다 .- P

+0

조엘, 당신의 응답을 주셔서 감사합니다. 본인의 서비스에 이의를 제기하는 것에 동의합니다. 나는 그걸 알아 차 렸지만, 실제로는 약간 눈살을 찌푸렸다. 그러나 그 층의 개념이 내게 호소했다. 나는이 순간에도 의존성 주입의 전체 개념을 파악하려고 노력하고 있지만 이것이 어떻게 작동하는지 완전히 명확하지 않습니다. 이것이 MVC 환경에서 어떻게 작동하는지 간단한 예를 들려 주시겠습니까? 예를 들어 사용자 개체를 찾는 것과 관련하여 어디에서 무엇을 주입할까요? 나는 그 개념을 이해하는 데 어려움을 겪고있다. 미리 감사드립니다. –

+0

내가 당신이 당신의 머리를 ioc 주위에 감싸려고하고 있다고 말할 때 이해한다고 말하면서 저를 믿으십시오. 이 코멘트 상자는 실제로 사용하기에는 너무 작지만, ninject lib (http://ninject.org/)를 체크 아웃 할 것을 제안합니다.자습서는 단계별로 진행되어 개념을 소개하기 시작합니다. 요약하면 API를 구체적인 구현과 분리하는 것입니다. mvc 프로젝트의 코드가 특정 구현이 아닌 API에 대해 작동해야합니다. 나중에 단위 테스트를 수행 할 때 변경할 수 있습니다. –

+3

Martin Fowler에 따르면 서비스 계층은 "서비스 계층을 정의하는 서비스 계층을 정의합니다 사용 가능한 작업 세트 "비즈 프로젝트에서 이러한 작업은 대개 CRUD이지만 항상 그런 것은 아닙니다. 그래서 나는 서비스 계층 = 저장소라고 생각하지 않는다. 진정한 서비스 계층 (내가 좋아하는)이 MVC에 어떻게 들어 맞는지는 아직도 나에게는 수수께끼이다. 내 감정은 MVC의 M이 S로 대체되어야한다는 것이다. 컨트롤러가 내가 말하는 서비스 계층을 형성하지 않는다면? 나는 그것이 대부분의 사람들이 어떻게하는지 생각합니다. 그러나 컨트롤러가 응용 프로그램 경계를 정의해야합니까? 나는 혼란 스럽다 ... –