|
5. MVC 프레임 워크 및 응용 프로그램 구조
ASP.NET 웹 사이트에서, URL은 일반적으로 디스크(일반적으로, .aspx파일)에 저장되어있는 파일에 대한 매핑작업, 마크업과 코드 요청에 응답하기 위해서 처리됩니다.
ASP.NET MVC 프레임워크는 ASP.NET 웹 폼 페이지와 다르게 서버 코드에 URL을 매핑합니다. 컨트롤러 클래스는 사용자 입력과 상호 작용 등의 들어오는 요청을 처리하고 사용자의 입력에 따라서 해당 응용 프로그램 및 데이터 로직을 실행합니다. 컨트롤러 클래스는 일반적으로 HTML출력을 생성하는 별도의 View 컴포넌트를 호출합니다.
ASP.NET MVC 프레임 워크는 모델, 뷰, 그리고 컨트롤러 구성 요소를 분리합니다. Model은 데이터베이스에 의해 백업된 데이터와 일반적으로, 응용 프로그램의 / 도메인 로직 사업을 표현합니다. View는 컨트롤러와 적절한 UI를 렌더링으로 선택됩니다. 기본적으로 ASP.NET MVC 프레임 워크는 기존의 ASP.NET 페이지를 사용합니다. (. aspx)를, 마스터 페이지 (. master), 그리고 사용자 정의 컨트롤 (. ascx) 형식을 브라우저에 렌더링합니다. 컨트롤러는 액션메서드를에서 사용자의 요청에 따른 액션메서드를 위치시키고 액션 메서드가 작동할 때 발생할 수 있는 오류를 처리합니다. 그런 다음 요청된 View를 렌더링합니다. 각각의 구성 요소 집합은 MVC 웹 응용 프로그램 프로젝트에서 별도의 폴더에 위치합니다.
URL 라우팅
ASP.NET MVC 프레임 워크는 컨트롤러 클래스에 URL을 매핑에 대한 유연성을 제공하는 엔진에 ASP.NET 라우팅을 사용합니다. ASP.NET MVC 프레임 워크는 들어오는 순서에 따라 URL에 적절한 컨트롤러를 선택하기 위해 사용하는 라우팅규칙을 정의할 수 있습니다. ASP.NET MVC 프레임 워크는 또한 자동으로 URL에 정의된 구문 분석 변수를 라우팅 엔진에 가져와 매개 변수 인자로 컨트롤러에 값을 전달합니다.
MVC 프레임 워크와 Postbacks
ASP.NET MVC 프레임 워크는 서버와 상호 작용에 대한 ASP.NET 웹 양식을 다시 게시 모델을 사용하지 않습니다. 대신, 모든 최종 사용자의 상호 작용은 컨트롤러 클래스로 라우팅됩니다. 이것은 UI 로직과 비즈니스 로직과 사이의 분리가 testability 도움 유지합니다. 그 결과, ASP.NET 뷰 상태 및 ASP.NET 웹 폼 페이지를 생명주기 이벤트가 MVC 기반의 전망과 통합되지 않습니다.
MVC 프로젝트 템플릿
ASP.NET MVC 프레임 워크는 MVC 패턴을 지원하는 웹 애플 리케이션을 만들 수있는 비주얼 스튜디오의 프로젝트 템플릿이 포함되어 있습니다. 이 템플릿 구성 파일 항목 및 항목 템플릿, 필요한 폴더를 가지고 구성된 새로운 MVC 웹 응용 프로그램을 만듭니다.
참고 :
ASP.NET MVC 웹 응용 프로그램 프로젝트는 ASP.NET 웹 응용 프로그램 프로젝트 템플릿을 기반으로 템플릿이 있습니다. 파일 메뉴 대신 새 웹 사이트를 선택하여에서 새 프로젝트를 선택하여 새로운 ASP.NET MVC 프로젝트를 선택합니다.
새로운 MVC 웹 응용 프로그램을 만들 때 Visual Studio에서 프로젝트를 만들 수있는 옵션을 제공합니다. 첫 번째 프로젝트는 당신의 애플 리케이션을 구현하는 웹 프로젝트입니다. 두번째 프로젝트는 첫 번째 프로젝트에 MVC 구성 요소에 대한 단위 테스트를 작성할 수있는 단위 테스트 프로젝트입니다.
참고 :
마이크로 소프트 비주얼 스튜디오 일반용 및 Microsoft Visual 웹 개발자 익스프레스 에디션 단위 테스트 프로젝트 생성을 지원하지 않습니다. 당신은 MVC 응용 프로그램을 만들 때 그러므로, 그들은 테스트 프로젝트를 만들 수있는 옵션을 제공하지 않습니다.
ASP.NET MVC 응용 프로그램을 테스트하기 위해의. NET Framework와 호환되는 모든 단위 테스트 프레임워크를 사용할 수 있습니다. 비주얼 스튜디오 Professional Edition은 MSTest 테스트 프로젝트 지원을 포함합니다.
MVC 웹 응용 프로그램 프로젝트 구조
ASP.NET MVC 웹 응용 프로그램 프로젝트를 만들 때, MVC 구성 요소는 다음 그림과 같이 프로젝트 폴더에 따라 구분됩니다 :
기본적으로 MVC 프로젝트는 다음 폴더를 포함 합니다.
Global에서 URL 기본값 라우팅
라우트는 Global.asax 파일의 Application_Start 메서드에서 초기화됩니다. 다음 예제는 기본적으로 라우팅 로직을 포함하는 전형적인 Global.asax 파일을 보여줍니다.
routes.MapRoute( } protected void Application_Start()
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
{
RegisterRoutes(RouteTable.Routes);
}
}
6. ASP.NET 웹 양식 및 MVC의 호환성
ASP.NET 웹 폼 및 ASP.NET MVC 모델의 강점을 설명합니다. 그런 MVC 응용 프로그램에서 사용할 수있는 것과 피해야 할 ASP.NET 프레임 워크의 기능을 설명합니다.
ASP.NET 웹 양식의 강점
웹 폼 기반의 웹 응용 프로그램의 장점
MVC와 호환되는 ASP.NET Framework의 특징
Web Form 및 MVC는 아주 다른 기술로 보일 수 있습니다. 그러나, 이러한 기술은 모두 ASP.NET 프레임 워크에 내장되어 있습니다. 따라서, Web Form 기반으로 응용 프로그램을 만드는 데 사용되는 대부분의 ASP.NET 프레임 워크의 기능은 또한 MVC 애플 리케이션을 개발하기 위해 사용할 수 있습니다. 이것은 Web Form 응용 프로그램에서처럼 MVC 응용 프로그램에서 동일한 방식으로 작동하는 회원, 인증, 역할 및 구성과 같은 기능을 포함하고 있습니다. 대부분의 ASP.NET 네임 스페이스, 클래스 및 인터페이스는 ASP.NET MVC 응용 프로그램에서 사용할 수 있습니다.
MVC와 호환되지 않는 ASP.NET Framework의 특징
ASP.NET MVC는 View_State를 사용하여 상태 정보를 유지하지 않기 때문에 당신이 그것을 필요하다면, 당신은 상태 정보를 관리하는 다른 방법을 찾아야합니다. 또한 view state와 postback에 의존하고 있도록 설계된 서버 컨트롤은 ASP.NET MVC 응용 프로그램에서 작동하지 않습니다. 따라서, GridView, Repeater, and DataList 컨트롤과 같은 컨트롤을 사용해서는 안됩니다.
Web Form 페이지의 라이프 사이클은 많은 이벤트가 발생 복잡합니다. Model, View 간의 상호 작용, 그리고 Controller는 다른 라이프사이클 모델을 사용하기 때문에 이러한 이벤트는, ASP.NET MVC 응용 프로그램에서 지원되지 않습니다.
7. ASP.NET MVC 3의 개선된 기능들 요약
ASP.NET MVC 3은 MVC 1, 2에서, 코드를 단순화하고 확장성의 깊이를 큰틀에 추가했습니다.
7-1 MvcScaffold와 Scaffolding 확장 통합
새로운 Scaffolding 시스템은 완전히 새로운 프레임워크에서, 쉽게 끌어와서 생산적으로 시작할 수 있으며, 무엇을 할 것인지에 대한 경험이 있다면 일반적인 개발 작업을 자동화 할 수 있습니다.
자동화 작업은 MvcScaffolding라 불리우는 새로운 NuGet의 scaffolding 패키지에 의해 공급됩니다. "Scaffolding"은 "사용자 제작을 할 수 있는 소프트웨어의 기본 개요를 편집하여 빠르게 만듬"을 의미하는 소프트웨어 기술일것입니다. 우리가 작성하는 ASP.NET MVC Scaffolding 패키지는 크게 몇 가지 시나리오에서 유용합니다 :
MvcScaffolding에 다른 기능은 다음과 같습니다.
ASP.NET MVC 3 업데이트 도구는 다음과 같은 scaffolding 시스템에 대한 비주얼스튜디오의 지원을 포함합니다.
다음 리소스를 참조 ASP.NET MVC 3 Scafolding 에 대한 자세한 내용:
7-2 HTML 5 Project Templates
새 프로젝트 대화 상자 템플릿이 확인란은 HTML를 프로젝트의 5 버전을 사용 포함되어 있습니다. 이들은 Modernizr 1.7 HTML을 5에 대한 호환성 지원을 제공하고, 하위 수준 브라우저에서 3 CSS를 활용할 수 있는 템플릿입니다.
7-3 The Razor View Engine
ASP.NET MVC 3는 다음과 같은 이점을 제공하는 "Razor"라는 이름의 새로운 엔진 제공.
새로운 "Razor"의 기능은 다음과 같습니다.
"Razor"는 또한 다음과 같은 새로운 HTML 헬퍼를 포함합니다.
"Razor"에 대한 자세한 내용은 다음 리소스를 참조하십시오 :
7-4 Support for Multiple View Engines
ASP.NET MVC 3에서 뷰페이지를 만들려는 View 엔진을 선택할 때 추가 보기 대화 상자에서 프로젝트를 위한 기본 뷰엔진을 새 대화상자에서 선택할 수 있습니다. Web Form View 엔진(.ASPX), Razor, 또는NHaml, 또는 NDjango와 같은 오픈소스 뷰 엔진을 선택할 수 있습니다.
7-5 Controller Improvements
7-5_1 Global Action Filters
때로는 실행 전 액선 방법이나 실행 후 액션 방법에 각각의 논리를 수행하기를 원합니다. 이를 지원하기 위해 ASP.NET MVC 2 액션 필터를 제공합니다. 액션 필터는 선언적 특정 컨트롤러 액션 방식에 사전 작업 및 사후 조치 동작을 추가하는 수단을 제공하는 사용자 정의 속성이 있습니다. 하지만, 일부 경우에 당신은 모든 행동 방식에 적용됩니다. 미리 조치를하거나 사후 조치 동작을 지정할 수 있습니다. MVC 3는 GlobalFilters 컬렉션에 추가하여 글로벌 필터를 지정할 수 있습니다. 글로벌 액션 필터에 대한 자세한 내용은 다음 리소스를 참조하십시오 :
7-5_2 New "ViewBag" Property
MVC 2 컨트롤러는 느슨한 바인딩 API를 사용하여 뷰 템플릿에 데이터를 전달할 수있는 ViewData 속성을 지원합니다. MVC 3에서는 같은 목적을 달성하기 위해 ViewBag 속성으로 다소 단순한 구문을 사용할 수 있습니다. 예를 들어, ViewData["Message"]="text"를 쓰는 대신, ViewBag.Message="text"를 쓸 수 있습니다. ViewBag 속성을 사용하는 모든 암호화된 클래스를 정의할 필요가 없습니다. 그것은 동적 속성이기 때문에, 동적으로 get,set 속성을 대신할 수 있습니다. 내부 ViewBag 속성이 ViewData에 이름 / 값 쌍으로 저장됩니다.
7-5_3 New "ActionResult" Types
MVC 3에서 향상된 ActionResult 및 해당 유형의 Help 메서드는 다음에서 찾을 수 있습니다.
7-6_1 자바스크립트와 Ajax Improvements
기본적으로 AJAX 및 MVC 3 검증 헬퍼에 자바스크립트 접근 방식 사용. 눈에 띄지않는 자바스크립트는 HTML에 인라인 자바스크립트 주입을 방지합니다. 이것은, 이는 작고 어수선하지 않은 Html를 만들고 HTML을 쉽게 교체하거나 자바스크립트 라이브러리를 사용자 정의할 수 있습니다. MVC 3 유효성 검사 헬퍼도 기본적으로 플러그인 jQueryValidate를 사용합니다. MVC 2의 동작을 원한다면, Web.config를 설정을 사용하여 눈에 거슬리는 자바스크립트을 해제할 수 있습니다. 자바스크립트와 에이작스 개선 사항에 대한 자세한 내용을 보려면 다음 리소스를 참조하십시오 :
7-6_2 Client-Side Validation Enabled by Default
MVC의 이전 버전에서는 명시적으로 클라이언트측의 유효성 검사 요청을 활성화하려면 뷰에서 Html.EnableClientValidation 메서드를 호출해야합니다. MVC 3에서는이 클라이언트측 유효성 검사는 기본적으로 활성화되어 있기 때문에 더 이상 필요하지 않습니다. (Web.config 파일에서 설정을 사용하여 이것을 해제할 수 있습니다.)
클라이언트측 유효성 검사가 작동하기 위해서는 여전히 사이트에의 적절한 jQuery와 jQuery 유효성 라이브러리의 참조가 필요합니다. 이러한 내용은 Microsoft 또는 Google에서 CDNs 같은 콘텐츠 전송 네트워크(CND)에서 자신의 서버 또는 그 라이브러리 참조를 호스팅할 수 있습니다.
7-6_3 Remote Validator 원격 검사기
ASP.NET MVC 3는 jQuery 유효성 검사 플러그인의 원격 검사기 지원을 활용할 수 있도록 새로운 RemoteAttribute 클래스를 지원합니다. 이것은 오직 서버측에서 할 수있는 유효성 검사 로직을 수행하는 것으로 서버에서 정의하는 사용자 지정 메서드를 호출하는 클라이언트측 유효성 검사 라이브러리를 가능하게합니다.
다음 예제에서, 클라이언트 유효성 검사를 위해서 원격 속성은 사용자 이름 필드의 유효성을 검사하기 위한 UsersController 클래스에 UserNameAvailable 사용을 지정합니다.
public class User { [Remote("UserNameAvailable", "Users")] public string UserName { get; set; } } |
다응 예제는 해당 콘트롤러를 보여줍니다.
public class UsersController { public bool UserNameAvailable(string username) { if(MyRepository.UserNameExists(username)) { return "false"; } return "true"; } } |
보다 자세한 사용법은 MSDN library의 How to: Implement Remote Validation in ASP.NET MVC 에 있습니다.
7-6_4 JSON Binding Support
ASP.NET MVC 3는 기본 액션메서드 매개 변수에 JSON-인코딩된 데이터 및 모델- 바인딩을 받을 수있게 포함된 JSON 바인딩을 지원합니다. 이 기능은 클라이언트 템플릿를 포함하는 시나리오 및 데이터 바인딩에 유용합니다. (클라이언트를 사용하여 형식을 활성화하고 데이터 항목의 집합을 단일 데이터 항목을 표시하거나 템플릿은 클라이언트에서 실행되는 템플릿.) MVC 3는 서버에서 JSON 데이터를 클라이언트에 연결하는 간편한 액션 메서드가 있습니다.
7-7 Model Validation Improvements
7-7_1 "DataAnnotations" Metadata Attributes
ASP.NET MVC 3는 DataAnnotations 메타 데이터 DisplayAttribute와 같은 속성을 지원합니다.
"ValidationAttribute" Class
ValidationAttribute 클래스는 현재 유효성검증 구문에관한 자세한 정보를 제공하는 오브젝트 유효성검사 시작과 같은 새로운 IsValid의 overload를 지원하는 . NET Framework의 4에서 개선되었습니다. 이것은 모델의 다른 속성에 따라 현재 값를 확인할 수있는 풍부한 시나리오를 가능하게합니다. 예를 들어, 새로운 CompareAttribute 특성은 모델의 두 가지 속성의 값을 비교할 수 있습니다. 다음 예제에서, ComparePassword 속성은 주문 유효의 암호 필드를 일치해야합니다.
public class User { [Required] public string Password { get; set; } [Required, Compare("Password")] public string ComparePassword { get; set; } } |
7-7_2 Validation Interfaces
IValidatableObject 인터페이스는 모델 수준의 검증을 수행하는 기능입니다. 그리고 그것은 전체 모델의 상태에만 해당하는 유효성 검사 오류 메시지를 제공하는 기능입니다. MVC 3 에서 모델을 바인딩 할 때, IValidatableObject 인터페이스에서 에러를 검사하는 것과 함께 모델 내에있는 두 속성 사이에 기본 내장된 Html 형식 Helper 뷰에서 자동르로 플래그 또는 영향받는 필드를 하이라이트 할 수 있습니다.
IClientValidatable 인터페이스는 클라이언트 유효성 검사에 대한 검사기능 지원이 있는지 여부를 ASP.NET MVC 런타임에 발견할 수 있습니다. 이 인터페이스는 그것이 다양한 검증 프레임 워크에 통합될 수 있도록 설계되었습니다.
검증 인터페이스에 대한 자세한 내용은 스콧 구스리의 Scott Guthrie's MVC 3 Preview blog post. 모델 유효성 검사 향상 섹션을 참조하십시오. (단, 블로그에서 "IValidateObject"에 대한 참조는 "IValidatableObject"되어야합니다.)
7-8 Dependency Injection Improvements 의존성 주입 개선
ASP.NET MVC 3는 의존성 주입(DI) 및 역전 제어 (IOC)는 컨테이너와 통합에 대한 더 나은 지원을 제공합니다. DI에 대한 지원은 다음과 같은 분야에 추가되었습니다 :
MVC 3는 Common Service Locator 라이브러리 및 그 라이브러리의 IServiceLocator 인터페이스를 지원하는 DI 컨테이너를 지원합니다. 그것은 또한 쉽게 DI 프레임 워크를 통합할 수있게 해주는 새로운 IDependencyResolver 인터페이스를 지원합니다.
7-9 Other New Features
7-9_1 NuGet Integration 너겟 통합
ASP.NET MVC 3는 자동으로 설치되며 그 설치의 일부분으로 NuGet이 있습니다. NuGet는 오픈소스를 쉽게, 찾고 설치 및 사용하게 하는 패키지 관리자입니다. 닷넷 라이브러리 및 프로젝트에 툴은(ASP.NET 웹 폼 및 ASP.NET MVC 포함) 모든 비주얼 스튜디오의 프로젝트 형식에서 작동합니다.
NuGet은 자신의 라이브러리를 패키지하고 온라인 갤러리에 등록하는 (예 : Moq, NHibernate, Ninject, StructureMap, NUnit, 윈저, RhinoMocks 및 Elmah 같은 프로젝트가) 오픈 소스 프로젝트를 유지하는 개발이 가능합니다. 그것은 다음에 용이합니다. 이러한 라이브러리 중 하나를 사용하려면 닷넷 개발자가 패키지를 찾아서 작업중인 프로젝트에 그것을 설치합니다.
ASP.NET 3 업데이트 도구를 통해 이 프로젝트는 자바스크립트 라이브러리템플릿를 포함하여 사전 설치된 NuGet를 통해 업데이트 가능합니다. 엔터티 프레임 워크 Code First는 NuGet 패키지에서 미리 설치됩니다.
자세한 정보는 NuGet documentation on the CodePlex site에서 확인할 수 있습니다.
7-9_2 Partial-Page Output Caching 부분 페이지 출력 캐싱
ASP.NET MVC는 버전 1 이후 전체 페이지 응답 출력 캐싱을 지원하고 있습니다. 또한 MVC 3는 간단하게 캐싱 영역 또는 반응 지점에 승인된 부분 페이지 출력캐싱을 지원합니다. 캐싱에 대한 자세한 내용은 MVC 3 Release Notes의 내역에서 캐싱 부분 페이지 출력의 Scott Guthrie's blog post on the MVC 3 release candidate 블로그 게시물의 부분을 참조하십시오.
7-9_3 Granular Control over Request Validation 유효성 검사 요청을 통한 세분화된 컨트롤
ASP.NET MVC는 XSS와 HTML 인젝션 공격으로부터 자동으로 보호하는 유효성 검사 요청이 내장되어 있습니다. 그러나, 때로는사용자의 게시물(블로그 항목 또는 CMS는 콘텐츠의 예) HTML 콘텐츠를 사용하고싶어서, 명시적으로 유효성검사 요구를 해지하려 할 때가 있다. 당신은 모델과 모델에 바인딩하는 동안 사전 속성 기준으로 AllowHtml 속성을 추가할 수 있습니다. 유효성 검사 요청에 대한 자세한 내용은 다음 리소스를 참조하십시오 :
7-9_4 Extensible "New Project" Dialog Box "새 프로젝트" 대화상자 확장
ASP.NET MVC 3에서는 새 프로젝트 대화 상자에 대하여 뷰 엔진 및 단위 테스트 프레임 워크를 프로젝트 템플릿을 추가할 수 있습니다.
7-9_5 Template Scaffolding Improvements
ASP.NET MVC 3 scaffolding 템플릿은 모델에 기본 키 속성을 식별하고 MVC 이전 버전보다 그들을 적절하게 취급합니다. (예를 들어, scaffolding 템플릿은 편집 필드 양식에 scaffold 되지 않는지를 확실히 합니다.)
기본적으로 Create 및 Edit Scaffolder는 이제 Html.TextBoxFor 헬퍼 대신 Html.EditorFor 도우미를 사용하여 편집합니다. 이 개선은 추가 뷰 대화상자에서 뷰를 만들 때 데이터 속성 주석의 양식에 모델의 메타데이터를 공급합니다.
7-9_6 New Overloads for "Html.LabelFor" and "Html.LabelForModel"
"Html.LabelFor"와 "Html.LabelForModel"에 대한 새로운 과부하
새로운 방식의 과부하는 LabelFor와 LabelForModel 도우미 메서드에 추가되었습니다. 새로운 과부하를 지정하거나 레이블 텍스트를 재정의를 가능하게합니다.
7-9_7 Sessionless Controller Support 컨트롤러 공급 기간 설정들
ASP.NET MVC 3에서는 세션 상태를 사용할지, 그리고 읽기/쓰기, 또는 읽기 전용클래스를 사용할지 여부를 결정할 수 있습니다. sessionless 컨트롤러 지원에 대한 자세한 내용은 MVC 3 Release Notes.를 참조하십시오.
7-9_8 New "AdditionalMetadataAttribute" Class
당신은 모델에 대한 ModelMetadata.AdditionalValues 사전 속성에서 AdditionalMetadata 속성을 사용할 수 있습니다. 예를 들면, 다음 예제와 같이 뷰 모델은 관리자에게만 표시되는 속성, 그 속성에 대하여 주석을 처리할 수 있습니다.
public class ProductViewModel { [AdditionalMetadata("AdminOnly", true)] public string RefundCode {get; set;} } |
메타 데이터는 모든 디스플레이 또는 편집자의 템플릿에서 사용할 수 있습니다. 그것은 당신이 메타 데이터 정보를 해석에 달려 있습니다.
7-9_9 AccountController improvements
인터넷 프로젝트 템플릿에 AccountController이 크게 향상되었습니다.
7-9_10 New Intranet Project Template
새로운 인트라넷 프로젝트 템플릿은 Windows 인증을 가능하게하는 것과 AccountController을 제거하는 것이 포함되어 있습니다.
|