문제

처음 StackOverflow에 대해 들었을 때 그리고 그것이 ASP.Net MVC로 구축되고 있다는 말을 들었을 때 저는 약간 혼란스러웠습니다.저는 ASP.Net이 항상 MVC 아키텍처의 예라고 생각했습니다.뷰를 제공하는 .aspx 페이지와 컨트롤러를 제공하는 .aspx.vb 페이지가 있으며 모델이 될 다른 클래스를 만들 수 있습니다.ASP.Net에서 MVC를 사용하는 프로세스는 다음에서 설명합니다. 마이크로소프트 기사.

그래서 내 질문은 다음과 같습니다.ASP.Net MVC는 일반 ASP.Net(ASP.Net 1.1에서도 가능)으로는 수행할 수 없는 기능을 제공합니까?그냥 멋진 URL인가요?MS가 Ruby On Rails 같은 신기술과 자신들을 비교하며 "우리도 할 수 있다"고 말하는 것은 단지 자랑거리일까요?파일->새로 만들기 메뉴에 있는 몇 가지 추가 템플릿 외에 ASP.Net MVC가 실제로 제공하는 것이 더 있습니까?

지금 당장은 정말 회의적이고 부정적으로 들릴 것 같으니 그만 두겠습니다.하지만 ASP.Net MVC가 실제로 무엇을 제공하는지 알고 싶습니다.또한 누군가가 위에서 아래로 이동하는지 또는 그 반대로 이동하는지에 따라 View-Controller-Model 또는 Model-Control-View의 레이어 순서가 아닌 Model-View-Controller인 이유를 말해 줄 수 있다면 나는 그것도 정말 감사드립니다.

편집하다

또한, 나는 웹 양식(AKA 서버 컨트롤) 모델에도 관심을 가져본 적이 없다는 점을 지적할 가치가 있을 것입니다.나는 그것을 최소한으로만 사용했고 직장에서는 한 번도 사용하지 않았습니다.

도움이 되었습니까?

해결책

aspx 페이지('뷰')가 코드 숨김('컨트롤러')보다 먼저 호출되기 때문에 .aspx는 MVC 패턴을 충족하지 않습니다.

이는 컨트롤러가 뷰에 '강한 종속성'을 가지고 있음을 의미하며 이는 MVC 원칙에 크게 어긋납니다.

MVC의 핵심 이점 중 하나는 실제 뷰를 인스턴스화하지 않고도 컨트롤러(많은 로직이 포함되어 있음)를 테스트할 수 있다는 것입니다..aspx 세계에서는 이 작업을 수행할 수 없습니다.

컨트롤러 자체를 테스트하는 것은 전체 asp.net 파이프라인(애플리케이션, 요청, 응답, 보기 상태, 세션 상태 등)을 인스턴스화하는 것보다 훨씬 빠릅니다.

다른 팁

Scott Guthrie는 이 게시물에서 이에 대해 설명했습니다.ASP.NET MVC 프레임워크"

  • 기본적으로 우려 사항, 테스트 가능성 및 TDD를 깨끗하게 분리 할 수 ​​있습니다.MVC 프레임 워크 내의 모든 핵심 계약은 인터페이스 기반이며 쉽게 조롱 할 수 있습니다 (인터페이스 기반 IHTTPREQUEST/IHTTPRESPONSE INTRINSICS 포함).ASP.NET 프로세스 내에서 컨트롤러를 실행하지 않고도 애플리케이션을 테스트 할 수 있습니다 (단위 테스트 작성).이 테스트를 원하는 단위 테스트 프레임 워크 (Nunit, MBunit, MS Test 등)를 사용할 수 있습니다.

  • 확장성이 뛰어나고 플러그 가능합니다.MVC 프레임 워크의 모든 것은 쉽게 교체/사용자 정의 할 수 있도록 설계되었습니다 (예 : 예 :자신의 뷰 엔진, 라우팅 정책, 매개 변수 직렬화 등을 선택적으로 플러그인 할 수 있습니다).또한 기존 의존성 주입 및 IOC 컨테이너 모델 (Windsor, Spring.net, Nhibernate 등)을 사용하는 것을 지원합니다.

  • 깨끗한 URL로 응용 프로그램을 구축 할 수있는 매우 강력한 URL 매핑 구성 요소가 포함되어 있습니다.URL은 그 안에 확장 기능을 가질 필요가 없으며 SEO 및 REST 친화적 인 이름 패턴을 쉽게 지원하도록 설계되었습니다.예를 들어, 위의 프로젝트에서/products/edit/4 url을 ProductsController 클래스의 "편집"동작에 쉽게 매핑하거나/블로그/scottgu/10-10-2007/omeopic/url을 맵핑 할 수 있습니다. " DisplayPost "BlogEngineController 클래스의 동작.

  • MVC 프레임 워크는 기존 asp.net .aspx, .ascx 및 .mas 서버 컨트롤, 템플릿, 데이터 바인딩, 현지화 등).그러나 서버와의 상호 작용을 위해 기존 포스트백 모델을 사용하지는 않습니다.대신, 모든 최종 사용자 상호 작용을 대신 컨트롤러 클래스로 라우팅 할 수 있습니다. 이는 우려와 테스트 가능성을 깨끗하게 분리 할 수 ​​있도록 도와줍니다 (또한 MVC 기반보기가있는 ViewState 또는 Page Lifecycle도 의미하지 않습니다).

  • ASP.NET MVC 프레임 워크는 Form/Windows 인증, URL 인증, 멤버십/역할, 출력 및 데이터 캐싱, 세션/프로필 상태 관리, 건강 모니터링, 구성 시스템, 제공자 아키텍처 등과 같은 기존 ASP.NET 기능을 완전히 지원합니다.

주로 책임이 잘 정의되어 테스트 가능한 웹 사이트를 만드는 것이 매우 쉽습니다.또한 새로운 MVC 프레임워크를 사용하여 유효한 XHTML UI를 만드는 것이 훨씬 쉽습니다.

저는 웹사이트 작업을 시작하기 위해 두 번째 CTP(지금은 5개 정도인 것 같아요)를 사용해 본 적이 있으며, 이전에 몇 가지 웹 애플리케이션을 만들어본 경험이 있어서 서버 제어 모델을 사용하는 것보다 수백 배 더 낫다고 말하고 싶습니다.

자신이 무엇을 하고 있는지 모를 때 서버 제어는 괜찮습니다.웹 애플리케이션이 어떻게 작동해야 하는지 배우기 시작하면, 웹 애플리케이션과 싸우기 시작합니다.결국 현재 컨트롤의 단점을 극복하려면 직접 작성해야 합니다.MVC가 빛을 발하기 시작하는 시점이 바로 이 시점입니다.그리고 그것은 웹사이트의 테스트 가능성도 고려하지 않은 것입니다...

ASP.net MVC를 ASP.net 웹 양식 개발자에게 설명하기 위한 Dino Esposito의 훌륭한 기사:

http://dotnetslackers.com/articles/aspnet/AnArchitecturalViewOfTheASPNETMVCFramework.aspx

더 이상 자동 생성된 HTML ID가 없습니다!!!어떤 종류의 자바스크립트를 사용하는 사람이라면 누구나 이 사실을 높이 평가할 것입니다.

코드가 포함된 ASP.Net은 다음과 같습니다. 거의 MVC이지만 그렇지 않은 이유 중 하나는 코드 숨김이 MVC의 큰 구성 요소인 aspx에 직접 연결되어 있다는 것입니다.코드 숨김을 컨트롤러로 생각하는 경우 뷰에서 완전히 분리되어야 합니다.새로운 .NET MVC는 이를 마무리하고 완전한 MVC 프레임워크를 제공합니다.이미 .NET용 기존 항목이 있지만(Spring.NET 참조)

나는 다음과 같은 몇 가지 간단한 예를 살펴 보았습니다. 이 하나.나는 그 차이를 어느 정도 볼 수 있다.그러나 MVC가 컨트롤러에서 뷰를 어떻게 분리하는지 실제로는 알 수 없습니다.뷰는 여전히 컨트롤러에 있는 항목을 참조합니다.나는 그것이 테스트하기를 훨씬 쉽게 만드는 방법을 알고 있으며 적어도 MVC에서는 컨트롤러가 뷰에 대한 지식이 없다는 것을 알고 있습니다.그리고 컨트롤러에서 메서드를 호출하기 위해 뷰를 처리할 필요가 없습니다.언뜻 보기에는 별 것 아닌 것처럼 보일지라도 상당한 도약이라는 것을 알 수 있습니다.

나는 서버 제어와 싸우는 것에 대해 @Will의 의견에 동의합니다.나는 그것들이 실제로 사용되는 상황에서 일한 적이 없지만, 내가 아는 많은 사람들은 그것들과 관련하여 꽤 많은 제한 사항에 직면했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top