MVC : 모델과 서비스의 차이점은 무엇입니까?


15

왜 일부 프레임 워크에서는 논리 계층을 "모델"이라고하고 일부 프레임 워크는 "서비스"라고합니다. 명명 규칙에 따라 서로 다르거 나 다른가요?


업데이트 1

내가 묻는 이유는 고전적인 MVC 프레임 워크 인 Zend Framework에서 모두가 Model이라는 개념을 사용하기 때문입니다. 이제 AngularJS를 배우고 있는데 Model이라는 단어가 사라지고 service라는 단어로 대체 된 것 같습니다.

내가 알아 차린 것은 서비스가 싱글 톤과 비슷하다는 것입니다 (예 : REST 클라이언트). 모델은 MVC 패턴으로 컨트롤러에서 오는 데이터 조작과 더 관련이 있습니다.


연구 결과를 공유하면 모든 사람에게 도움이됩니다. 당신이 무엇을 시도했고 왜 그것이 당신의 요구를 충족시키지 못했는지 알려주십시오. 이것은 당신이 시간을내어 자신을 돕기 위해 노력했고, 명백한 답변을 되풀이하는 것을 막아 주며, 무엇보다도 더 구체적이고 관련있는 답변을 얻는 데 도움이됩니다. 또한 물어
gnat

셰익스피어의 역설 : 다른 이름의 장미는 여전히 장미입니다. 응용 프로그램 모델은 서비스로 구현 될 수 있습니다.
jwenting

답변:


22

모델 : 개체에 속하는 필드, 개체에서 데이터를 가져 오거나 설정하는 데 도움이되는 메서드 (이름 + 성을 반환하는 이름 접근 자)

서비스 : 하나 이상의 모델로 작업을 수행하는 방법은 '작업 단위', 트랜잭션 등을 참조하십시오.


Employee :: create는 일련의 데이터를 가져 와서 필요한 경우 모델 유효성 검사를 수행하고 Employee Object를 반환해야합니다.

EmployeeService :: hireEmployee는 직원을 작성하고, 환영 이메일을 보내고, 우편함을 작성하고, 샌드위치 등을 만들 수 있습니다. 데이터 세트 또는 결과 코드 등을 리턴 할 수 있습니다.


이는 유효성 검사에도 영향을 줄 수 있습니다.

모델 검증 : 직원은 아이디, 성 및 생일이 있어야합니다.

서비스 검증 : 바텐더 직책의 직원은 21 세 이상이어야하며 관리자의 승인을 받아야합니다.


실제 비즈니스 로직이 얼마나 복잡한지를 보여주는 매우 구체적인 예에 ​​대해, 왜 서비스 계층이 모델 계층을 제외하고 도움이 될 수 있는지 설명해 주셔서 감사합니다.
wlnirvana

3

내 경험에 따르면 MVC 디자인 패턴모델 계층 은 데이터 조작 (POJO, DAO, SQL, JDBC 등)과 관련된 모든 소프트웨어 구성 요소를 말합니다.

서비스 계층은 실제로 MVC에 추가되는 반면 :

우리는 Model 레이어 컴포넌트가 Controller 레이어 안에서 호출 된다는 것을 알고 있습니다. 후자가 작성되면 간결하게 보이지 않는다는 것을 깨닫게됩니다 (더러운 코드로 더러워집니다). 컨트롤러는 추가 세부 사항을 제공하지 않을 수 있습니다 (예 : 요청 매개 변수를 소비 할 DAO 메소드를 호출하기 전에 형식화 요청 매개 변수 ...). 따라서이 추가 계층, 즉 서비스 계층을 포함 할 수 있습니다 .

결국, 더티 코드를 정적 메서드 안에 의미있는 이름, 매개 변수 등으로 포함시켜 합성 컨트롤러 레이어를 만들 수 있습니다.

이 링크를 살펴보십시오.

/programming/2762978/the-purpose-of-a-service-layer-and-asp-net-mvc-2


1
이것이 바로 서비스 계층을 보는 방법입니다. 그러나 종종 외부 API를 비즈니스 모델에 제공하는 데 사용되는 것을 보았습니다. 두 시나리오 모두 유효합니다. 여기서 문제는 명명법의 충돌에 있습니다.
burntblark

2

구조적으로 이러한 기본 클래스는 동일하지만 MVCS 구현의 서비스 및 모델 계층에 대한 다른 관심사를 분류하는 데 사용됩니다.

Service:- A concrete service class defines the API of an external Service.

Model :- Defines the API of the applications data model.

따라서 기본 클래스는 비슷하지만 기본 클래스를 확장하여 만든 구체적인 클래스는 완전히 다른 두 가지 용도로 사용됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.