MVC는 디자인 패턴 또는 아키텍처 패턴입니까?


109

SunMsdn 에 따르면 디자인 패턴입니다.

Wikipedia 에 따르면 건축 패턴입니다.

디자인 패턴에 비해 아키텍처 패턴은 규모가 더 큽니다. (Wikipedia- 건축 패턴 )

아니면 디자인 패턴이있는 건축 패턴일까요?

어느 것이 사실입니까?


1
진정한 대답 ...이 있어야 들어
마이크 G

Product Madness의 Dave에 따르면 MVC는 디자인 패턴이고 RobotLegs도 마찬가지입니다. : P
andygoestohollywood

답변:


56

MVC는 아키텍처 패턴에 가깝지만 완전한 응용 프로그램은 아닙니다. MVC는 대부분 응용 프로그램의 UI / 상호 작용 레이어와 관련이 있습니다. 여전히 비즈니스 로직 레이어, 아마도 일부 서비스 레이어 및 데이터 액세스 레이어가 필요할 것입니다. 즉, n 계층 접근 방식을 사용하는 경우입니다.


16
예, MVC는 프레젠테이션 계층의 아키텍처 패턴입니다.
murki 2010

8
"MVC는 대부분 응용 프로그램의 UI / 상호 작용 레이어와 관련이 있습니다."에 강력히 동의하지 않습니다. MVC의 "M"/ 모델 입니다 당신은 아마 여러 계층으로 분할 할 것 비즈니스 계층.
mewm

네,이 대답은 틀 렸습니다. MVC는 UI / Interaction에 관한 것이 아닙니다. 당신은 완벽하게 mvc를 프론트 엔드 측과 백 엔드 측에 가질 수 있으며, 처음보기에는 종종 html / js 또는 .jsp 또는 .phtml이었고 서버는 컨트롤러와 모델을 정의합니다. 예제 JSP (view), JavaBeans (Model), Servlet (controller). 모든 유명한 PHP 프레임 워크 (심포니, 젠드, 케이크 등)와 동일한 개념입니다. 그러나 오늘날의 프런트 엔드 프레임 워크는 백엔드 애플리케이션처럼 보이며 최신 자바 스크립트 프레임 워크는 mvc를 사용합니다 (html보기, 스크립트 제어 및 js 개체를 엔티티로 모델링)
amdev

40

왜 그들 중 하나가 사실이어야합니까?

관점에 따라 둘 다 사실 일 수 있습니다.

MVC는 애플리케이션 아키텍처의 기반을 형성하는 경우 아키텍처 패턴이 될 수 있습니다.

또한 모든 애플리케이션에 적용 할 수있는 추상적 인 개념 인 단순한 디자인 패턴으로도 볼 수 있습니다.


27

디자인 패턴 은 코드를 효과적으로 작성하는 방법을 알려줍니다 ( 코드 메트릭 고려 ).

몇 가지 이점 :

  1. 쉽게 유지 보수 가능
  2. 높은 재사용 성
  3. 추상화로 인해 읽기 가능

아키텍처 패턴 은 리소스를 효과적으로 활용하는 방법을 말합니다.

  1. 프로그래머 및 그래픽 디자이너와 같은 병렬 작업 실행은 병렬로 작업 할 수 있습니다.
  2. 여러 기술을 활용하여 소프트웨어를 구축 할 수 있습니다.

MVC에서 a). 자바 스크립트 템플릿을 사용하여 뷰를 만들 수 있으며 html도 사용할 수 있습니다 . b). 컨트롤러는 .NET 프레임 워크로 작성 될 수 있으며 c). 모델은 Java로 작성할 수 있습니다. json 데이터 만 반환하는 Java 서비스를 사용할 수 있습니다.

디자인 패턴에서는 Java의 AdminUser 클래스, C #의 Customer 클래스, Php의 Partners 클래스 및 Ruby의 팩토리 패턴과 같은 여러 기술로 코드를 작성할 수 있는 패턴 구현할 수 없습니다 . 흠 .. 너무 쉬워요? :)


6

얼마 전에 답변을 받았지만 아직 MVC를 유명하게 만든 책인 Buschmann 등이 1996 년에 출판 한 POSA (Pattern-Oriented Software Architecture) 책을 언급 한 사람은 없습니다. 디자인 패턴 책만큼 널리 읽히지는 않지만 , Gamma 등이 작성한 POSA는 패턴 커뮤니티에서 사용하는 기본 책 중 하나입니다.

아, 그리고 POSA는 MVC를 아키텍처 패턴으로 매우 명확하게 식별합니다. 내 직감은 MS와 Sun이 엉성하고 모든 패턴을 "디자인 패턴"이라고 부르는 것입니다.


3

둘 다 사실이라고 생각합니다. Ruby on Rails와 같은 프레임 워크에서 MVC 의 특정 인스턴스화 를 보고있는 경우 해당 인스턴스화는 디자인 패턴에 가깝습니다. MVC를 일반적인 개념 으로 보면 아키텍처 패턴에 가깝습니다.


3

MVC (모델 / 뷰 / 컨트롤러) 트라이어드 클래스 내부의 디자인 패턴에는 다음이 포함되며 이에 국한되지 않을 수 있습니다.

  • Observer , 변경된 객체 (모델)가 다른 객체 (뷰)의 세부 사항을 알 필요없이 하나 (모델)에 대한 변경 사항이 다른 수 (뷰)에 영향을 미칠 수 있도록 객체를 분리합니다.

  • Composite , 개별 객체 (뷰 구성 요소) 중 하나를 처리하는 것처럼 그룹 객체 (복합 뷰)를 처리 할 수 ​​있습니다.

  • Strategy , 뷰가 Controller 하위 클래스의 인스턴스를 사용하여 특정 응답 전략을 구현하는 경우 다른 전략을 구현하려면 인스턴스를 다른 종류의 컨트롤러로 교체하면됩니다.

  • 뷰에 대한 기본 컨트롤러 클래스를 지정하는 Factory Method .

  • 데코레이터 ,보기에 스크롤링 추가.


참고

  • 4-6 페이지 (섹션 1.2 Smalltalk MVC의 디자인 패턴)
  • 293 ~ 304 페이지 (관찰자 디자인 패턴)
  • 163 ~ 174 페이지 (복합 디자인 패턴)
  • 315 ~ 324 페이지 (전략 디자인 패턴)
  • 107 ~ 116 페이지 (Factory Method 디자인 패턴)
  • 175 ~ 185 페이지 (데코레이터 디자인 패턴)

Eric Gamma, Richard Helm, Ralph Johnson 및 John Vlissides. 디자인 패턴 : 재사용 가능한 객체 지향 소프트웨어의 요소 . Addison-Wesley, Reading, MA, 1994 년.


1
감사합니다. 다른 모든 답변은 잘못되었습니다. 그것은 절대적으로 "관점에 의존"하는 것이 아니며 수십 또는 수백 표를 얻는다고해서 잘못된 사실이되는 것은 아닙니다. MVC는 디자인 패턴 자체가 아니라 언급 한 여러 디자인 패턴을 사용하여 3 개의 레이어로 코드를 아키텍처 화하는 방법입니다. 백그라운드에서 MVC를 구현하는 모든 프레임 워크는 Observable, Strategy 및 복합 패턴의 개념을 사용합니다. MVC를 이해하는 가장 좋은 방법은 자신 만의 구현을 만드는 것입니다. 그러면 그 뒤에있는 디자인 패턴을 이해하게됩니다.
amdev

2

MVC는 항상 소프트웨어 아키텍처 책에서 프레젠테이션 레이어로 언급되고 소개되었습니다.

다음 책을 읽으십시오.

  1. 기업용 Microsoft.NET 솔루션 설계 (Microsoft Press)

  2. 전문 ASP.NET 디자인 패턴 (Wrox)

  3. Microsoft.NET을 사용한 엔터프라이즈 솔루션 패턴 (Microsoft press)

  4. 엔터프라이즈 애플리케이션 아키텍처의 패턴 (Addison Wesley)

  5. 엔터프라이즈 아키텍처에 대한 실용 가이드 (연습 관)


6
왜 2 개의 대답 이요? 이 답변을 첫 번째 메모에 추가 메모로 추가 할 수 있습니다
frogatto

2

10 명의 소프트웨어 아키텍트를 방에 배치하고 그들에게 Model-View-Controller 패턴이 무엇인지 토론하게한다면, 결국 12 개의 다른 의견을 갖게 될 것입니다. … 일부 순수 주의자들은 내가“MVC”라고 부르는 것에 필연적으로 불만을 품을 것입니다. 이 웹 페이지 하단의 게시판에 불타는 댓글을 남겨주세요. 나는 MVC가 의미하는 바에 대해 다른 관점을 기꺼이 즐겁게 할 것이지만, 나는 상관하지 않는다는 것을 명심하십시오.

조쉬 스미스


1

Martin Fowler에 따르면 이들은 GUI 아키텍처입니다. Martin Fowler-GUI 아키텍처

GUI 관련 클래스에만 영향을 미치기 때문에 애플리케이션의 크기에 따라 다르며, 작은 것 (대부분 GUI)에서는 아키텍처 패턴으로 간주 될 수있는 반면, 거대한 경우에는 GUI에 적용하는 디자인 패턴 일뿐입니다. 코드 (앱 코드의 10 % 일 수 있음).


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