MVC 대 n 계층 아키텍처


142

MVC (아키텍처 패턴)와 응용 프로그램의 n 계층 아키텍처의 차이점이 정확히 무엇인지 궁금합니다. 나는 그것을 찾았지만 간단한 설명을 찾을 수 없었다. MVC 개념에 대해 약간 순진 할 수 있으므로 누구나 차이점을 설명 할 수 있다면 좋을 것입니다.

건배

답변:


94

N 계층 아키텍처는 일반적으로 네트워크에 의해 분리 된 각 계층을 갖습니다. IE 프레젠테이션 계층은 일부 웹 서버에 있으며 비즈니스 로직을 위해 네트워크를 통해 백엔드 응용 프로그램 서버와 통신 한 다음 다시 네트워크를 통해 데이터베이스 서버와 통신하며 응용 프로그램 서버도 일부 원격 서비스를 호출합니다 ( 결제 처리에 대해서는 Authorize.net이라고 말하십시오).

MVC는 일부 응용 프로그램에서 모델, 뷰 및 컨트롤러를 나타내는 코드의 다른 부분을 담당하는 프로그래밍 디자인 패턴입니다. 예를 들어 Model 레이어에는 데이터를 저장하고 검색하기 위해 데이터베이스를 호출하는 내부 구현이있을 수 있기 때문에이 두 가지가 관련됩니다. 컨트롤러는 웹 서버에 상주하고 원격으로 앱 서버를 호출하여 데이터를 검색 할 수 있습니다. MVC는 앱 아키텍처가 구현되는 방법에 대한 세부 정보를 추상화합니다.

N 계층은 구현의 물리적 구조를 나타냅니다. MVC 디자인은 종종 N- 계층 아키텍처를 사용하여 구현되기 때문에이 두 가지가 혼동되기도합니다.


56
N 계층은 디자인 패턴이기도하며 3 계층 시스템을 수행하기 위해 3 대의 서버가 필요하지 않습니다. 실제로 단일 파일을 사용하여 n 계층 시스템을 수행 할 수 있으므로 각 계층을 개념적 개념으로 분리 할 수 ​​있습니다.
magallanes

6
계층은 기본적으로 네트워크 링크를 통해 프로세스 간 통신이 발생하고 있음을 나타냅니다. 프로세스 내 (동일한 파일로만 가능) 코드 디자인 흐름이 계층화 된 디자인 방식을 구성한다는 데 동의하지 않습니다. 물론 그것은 IMHO입니다. "서버"는 기계가 동일한 상자에서 여러 프로세스를 실행할 수 있음을 의미합니다. "localhost"네트워크에서 여전히 대화 할 수 있습니다.
Zak

2
논의 된 모든 형식은 3 계층 설계의 예입니다. 계층과 계층의 차이점을 혼동하지 마십시오. 실제 mahcine에서 둘 이상의 계층을 실행할 수 있지만 (예 : 하이퍼 바이저를 통해 큰 서버를 분할) 여기서 중요한 점은 실제 네트워크 홉 (예 : TCP / IP)에 대한 N-Tier aludes입니다. 로컬에서는 명명 된 파이프를 사용하는 것이 더 효율적이지만, 동일한 시스템에서 실행하는 경우 메모리 및 처리 능력을 위해 경쟁하게됩니다. 이러한 모든 것들은 프리젠 테이션, 비즈니스 로직 및 데이터 액세스 및 데이터베이스를 서로 다른 머신에서 분리하는 것을 고려해야하는 이유입니다.
잭 얀센

1
다른 답변을 읽으려면이 질문을 읽는 사람을 추천합니다.이 답변은 정확하지 않습니다
keisar

@magallanes, 'Zak'으로 이동, 먼저 Tier와 Layer 의 차이점을 제거해야합니다. 여기 에는 명확한 설명 이있는 매우 훌륭한 코드 프로젝트 기사 가 있습니다
Irf

42

3 계층 디자인이 다음과 같은 경우 :

Client <-> Middle <-> Data

MVC 후두둑은 다음과 같습니다.

     Middle
     ^    |
     |    v
Client <- Data

의미하는 것은 :

  • 3 계층에서 계층 간 통신은 양방향 이며 항상 중간 계층을 통과합니다.
  • MVC 등가에서 통신은 단방향이다 ; 우리는 각 "계층"이 왼쪽에있는 계층에 의해 업데이트되고 오른쪽에있는 계층을 업데이트 한다고 말할 수 있습니다. "왼쪽"과 "오른쪽"은 단지 예시 일뿐입니다.

PS 클라이언트보기중동 컨트롤러


13
MVC에서 모델은 클라이언트와 직접 상호 작용할 수 있습니까? 나는 그렇게 생각하지 않습니다!
palAlaa

6
@Alaa, 동의합니다. 이것이 데이터 흐름을 나타내는 것이라고 생각 합니다. 업데이트 : Wikipedia에서 방금 확인했으며 모델은 관찰자가 아닌 직접보기를 통해 뷰와 상호 작용할 수 있습니다.
void

1
MVC의 경우 : MVC 아키텍처는 삼각형입니다.보기는 컨트롤러에 업데이트를 보내고 컨트롤러는 모델을 업데이트하며보기는 모델에서 직접 업데이트됩니다. 3 계층 : 3 계층 아키텍처는 클라이언트 계층이 데이터 계층과 직접 통신하지 않습니다. 3 계층 모델의 모든 통신은 중간 계층을 통과해야한다
케탄 italiya

1
여기서 Middle이 컨트롤러 인 경우 Middle, Client 및 Middle, Data 간의 통신은 ans에 설명 된대로 단방향이 아닙니다. 컨트롤러는 데이터를 모델로 전달하고 모델은 업데이트 된 데이터를 컨트롤러로 되돌려 브라우저로 반환합니다. 보기를 통과 한 후
Dragon

30

이것은 무엇 에 대해 말할 n 계층 아키텍처

언뜻보기에 세 가지 계층은 MVC (Model View Controller) 개념과 유사하게 보일 수 있습니다. 그러나 위상 적으로는 다릅니다. 3 계층 아키텍처의 기본 규칙은 클라이언트 계층이 데이터 계층과 직접 통신하지 않는 것입니다. 3 계층 모델에서는 모든 통신이 미들웨어 계층을 통과해야합니다. 개념적으로 3 계층 아키텍처는 선형입니다. 그러나 MVC 아키텍처는 삼각형입니다.보기는 컨트롤러에 업데이트를 보내고 컨트롤러는 모델을 업데이트하며보기는 모델에서 직접 업데이트됩니다.


11
잘 들리지만 "뷰가 모델에서 직접 업데이트된다"는 것은 좋은 생각이 아닙니다. 업데이트 및 삽입에는 컨트롤러를 사용하는 것이 좋지만 선택 및 필터에는 사용하지 않는 것이 좋으며 뷰를 모델에 바인딩하기 위해 관심의 분리 지점을 보지 못했습니다! 결론-MVC는 ....에 의해 만들어진 난독 화 중 하나입니다. 3 계층이 "시스템 아키텍처"또는 "응용 프로그램 디자인"으로 제한되어 있다는 것을 기억하지 않습니다. 중심 개념은 우려의 분리입니다 .
Sam

1
그것은 당신이하고있는 것에 달려 있습니다. iOS 애플리케이션 용 MVC 앱 (뷰가 모델에서 직접 업데이트되지 않을 수 있음)은 웹 앱과 다를 수 있습니다. MVC는 패러다임이며 절대적인 방법은 아닙니다.
Dave Kanter

2
@Sam은 전적으로 동의합니다. 직관적 인 개념을 나타내는 용어가 너무 많습니다.
smwikipedia

1
좋은 소리, 작동하지 않습니다. 위키 백과는 진실의 근원이 아닙니다
ACV

그것이 당신이 진실을 해석하는 방식이며, 다시 당신의 목표가 무엇인지에 달려 있습니다
Xinus

17

유일한 유사점은 두 패턴이 다이어그램에 세 개의 상자를 가지고 있다는 것입니다. 근본적으로 그들은 그들의 사용에서 완전히 다릅니다. 사실, 어떤 패턴을 사용할지 선택하는 것이 아니라 두 패턴을 조화롭게 사용할 수 있습니다. 다음은이 두 가지를 잘 비교 한 것입니다 : http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html


3
특히 MVC가 UI에 중점을두고 3 계층 디자인의 UI 계층이 될 수 있기 때문에 이것이 가장 좋은 대답이라고 생각합니다. 링크의 다이어그램은 이것을 잘 보여줍니다.
Alex

5

3 계층 아키텍처의 기본 규칙은 클라이언트 계층이 데이터 계층과 직접 통신하지 않는 것입니다. 3 계층 모델에서는 모든 통신이 미들웨어 계층을 통과해야합니다.

라이너 아키텍처입니다. 이것은 사용자와 데이터베이스간에 정보를 전달하는 방법에 대한 문제를 해결합니다. MVC가 삼각형 아키텍처 인 경우, View는 컨트롤러에 업데이트를 보내고 컨트롤러는 모델을 업데이트하고 뷰는 모델에서 직접 업데이트됩니다. 이것은 사용자 인터페이스가 화면에서 구성 요소를 관리하는 방법에 대한 질문을 다룹니다.


5

@Cherry Middle ware는 MVC 패턴의 요청 처리기 또는 리디렉터와 비슷하게 작동합니다.

저에 따르면 Model View Controller가 이와 같이 작동한다고 MVC에 대해 조금 설명하고 싶습니다.

  1. 클라이언트는 서비스를 요청하여 세션을 시작합니다.
  2. 이 요청은 컨트롤러 (요청 처리기, 리디렉터 등)에 의해 수신 및 처리됩니다.
  3. 컨트롤러는 요청에 대한 기본 정보를 처리하고 데이터 요청을 채울 수있는 관련 모델로 리디렉션합니다.
  4. 컨트롤러가 전달한 매개 변수에 따라 요청을 모델로 채우고 결과를 컨트롤러로 다시 보냅니다. (참고 : 여기서는 진정한 MVC 아키텍처에서 데이터가 클라이언트로 직접 반환되지 않고 채워져 컨트롤러로 반환된다는 것을 분명히하고 싶습니다.)
  5. 해당 데이터를 View (Client)로 보내는 것보다 컨트롤러.
  6. 고객이 요청한 서비스를 제공합니다.

그것이 내가 아는 MVC에 관한 것입니다.


1
위에서 언급 한 것처럼 MVC는 삼각형
이므로이

5

휴식을 취하십시오. 실제 문제를 해결할 때 특정 패턴으로 제한하지 마십시오. 몇 가지 일반적인 원칙을 기억하십시오. 그 중 하나는 문제 분리 입니다.


4

여기서 강조되지 않은 또 다른 주요 차이점은 선형이기 때문에 N 계층 모델에서는 N이 반드시 3 계층 일 필요는 없다는 것입니다! 중간 계층이 두 개의 하위 계층 (비즈니스 논리 및 데이터 액세스)을 갖는 3 개의 계층 (프레젠테이션, 앱, 데이터)으로 가장 자주 구현됩니다. 또한 MVC의 모델에는 데이터 조작을위한 데이터 및 비즈니스 로직이 모두 포함될 수 있지만 n- 계층의 별도 계층에 있습니다.


3

N-Tier 아키텍처는 배포 다이어그램을 사용하여 가장 잘 정의됩니다.

MVC 아키텍처는 시퀀스 다이어그램을 사용하여 가장 잘 정의됩니다.

2는 동일하지 않으며 관련이 없으며 두 아키텍처를 함께 결합 할 수 있습니다. 많은 회사들이 배포 및 확장 성뿐만 아니라 코드 재사용을 위해 N Tier 아키텍처를 만드는 단계를 밟았습니다.

예를 들어 Business Entity 개체는 데스크톱 앱, 클라이언트에 노출 된 웹 서비스, 웹 앱 또는 모바일 앱에서 사용해야 할 수 있습니다. 단순히 MVC 접근 방식을 사용하더라도 아무것도 재사용하는 데 도움이되지 않습니다.


mvc가 주어진 시나리오에서 아무것도 재사용하지 않으면 n 계층 아치와 비교할 때 mvc의 이점이 있습니다.
Dragon

2

결론 : N-tier는 아키텍처, MVC는 디자인 패턴입니다. 그들은 두 개의 다른 분야에 적용되는 동일한 은유입니다.


1

Jerry : 두 사람의 관계를 보여주는 간단한 예가 있습니다 :


Tier 1- 입력 검증, 계산 및 뷰와 관련된 기타 사항을 처리하기 위해 일종의 네트워크 서비스 또는 이와 유사한 컨트롤러를 통해 Tier 2와 통신하는 모델로 구성됩니다. 그리고 여기에는 뷰 자체가 포함되어 있습니다. 물론 데스크톱 응용 프로그램의 GUI이거나 웹 응용 프로그램의 웹 인터페이스 일 수 있습니다.


2 단계 -1 단계 에서 메시지를 수신하는 일종의 서비스 또는 기타 방법이 포함되어 있습니다. 1 단계에 대해 알지 못하거나 위의 전화에만 응답 할 수 있으므로 스스로 요청하지 마십시오. 또한 모든 비즈니스 로직을 포함합니다.


계층 3- 도메인 모델, 데이터베이스의 객체 표현 및 데이터베이스 항목을 통신하고 업데이트하는 모든 논리를 포함합니다.


1

3 계층 모델에서는 모든 통신이 중간 계층을 통과해야합니다. 개념적으로 3 계층 아키텍처는 선형입니다. 그러나 [model-view-controller] MVC 아키텍처는 삼각형입니다. 뷰는 컨트롤러로 업데이트를 보내고 컨트롤러는 모델을 업데이트하며 뷰는 모델에서 직접 업데이트됩니다.


실제로 MVC가 아니라 MVVMC입니다. 컨트롤러가 뷰와 BLL 사이의 미들웨어임을 알기 때문에 MVC 또는 MVVMC는 프리젠 테이션 계층에 불과합니다. 이것이 BLL을 라이브러리로 사용하여 다른 플랫폼의 UI를 만들 수 있도록 유지 관리하는 방법입니다. asmx를 지원하는 일종의 aspx.cs입니다. 때로는 MVC가 프로젝트 폴더의 파일을 구성하는 나쁜 방법이라고 생각합니다. 모든 컨트롤러가 한 수준에 있고 하위 폴더의보기에 있기 때문에 이해하기가 약간 어렵습니다. 컨트롤러 용 하위 폴더를 만들 수도 있지만 중복 작업이 가능합니다.
Nithin B
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.