3.5 버전의 일부를 포함한 대부분의 닷넷 버전에서는 컨트롤로의 역할이 이벤트 치리기, 프레임워크, CLR,운영체제등으로 분산되어 있기때문에 MVC패턴을 쉽게 개발하지 못한다. 대신, 마이크로소프트는 n-티어 개발 방식을 강조했고 모델의 역할을 비즈니스 오브젝트와 데이터 오브젝트로 더 명확히 구분한다. 데이터 오브젝트는 많이 사용하는 ADO.NET클래스 라이브러리나 Entity Framework같은 형태로 제공된다
하지만 마이크로소프트는
ASP.NET를 위한 MVC Framework를 제공한다. 이 프레임워크는 닷넷 프레임워크에 MVC디자인 패턴을 매핑시켜 강력한 시너지 효과를 만들어 준다.
ASP.NET MVC Framework는 비주얼 스튜디오용 템플릿을 추가해서 MVC 웹 프로그램을 더 쉽게 만들 수 있도록 해준다. MVC 프로그램을 만들려고 할 때, 비주얼 스튜디오는 두개의 프로젝트를 만든다.
하나는 웹프로젝트이고 , 다른 하나는 웹 프로젝트가 원하는대로 실행되는지 확인할 수 이도록 해주는 테스트 프로젝트이다. 앞으로 진행할 부분들은 웹 프로젝트에만 중점을 준다
위키피디아에 의하면 테스트 주도 프로그래밍(Test-driven programming)은 1990년대 후반 켄트벡이 고안한 애자일 방법론의 하나인 익스트림 프로그래밍을 통합적인 관점에서 접근해서 유명해졌다. XP방법론은 짝을 이룬 페어 프로그래밍과 아주 짧은 개발 주기로 유명한다
웹 프로젝트에서, 비주얼 스튜디오는 직관적인 이름(Controllers, Models, Views)를 가진 세 개의 폴더를 만든다
컨트롤러 클래스와 실행 메소드들
기본적으로 MVC Framework는 URL 요청(request)들을 컨트롤러의 클래스들과 직접 매핑시킨다. 컨트롤러는 들어오는 페이지의 요청, 사용자의 입력, 기반 로직 등의 실행을 책임진다.
컨트롤러 클래스는 자신에게 들어오는 URL요청하는 것이 무엇인지 조사하고 상속받은 기반 클래스의 Excute()메소드를 재정의해서 URL 요청마다 응답을 할 수 있다. 하지만 더 쉬운 방법은 서브 클래스의 컨트롤러에서 요청되는 처리 과정마다 각각 행위에 따른 정의하는 것이다. 그러면, 기반 클래스가 들어온 요청들을 프로그램에서 정한 규칙에 맞춰 알맞은 메소드로 보낸다. 이때, 이 메소드들은 요청되는 URL파라미터들을 인수로 사용하는 것이 일반적인 방식이다.
모델 클래스
전통적인 MVC에서 모델은 상태를 유지하는 역할을 한다. ASP.NET에서 상태 관리는 주로 데이터베이스에서 이루어진다. ASP.NET MVC Framework의 모델 클래스들은 ADO.NET, LINQ 혹은 개발자들이 별도로 구현한 오브젝트들과도 잘 연동된다
뷰 클래스
프로그램의 처리 로직은 컨트롤러 클래스에서 , 데이터 관련 로직은 모델 클래스에서 각각 캡슐화된다. 이렇게 되면 뷰 클래스는 프리젠테이션 로직에 중점을 둘 수 있게 된다
일반적으로, 컨트롤러의 실행 메소드들은 들어오는 웹 요청(Request)들을 처리하며 , 함께 들어온 파라미터 값을 이용해 프로그램의 로직 코드를 실행시키고, 필요한 데이터를 가져오도록 모델과 통신하며 요청된 결과를 렌더링할 뷰 오브젝트들을 선택한다.
MVC 패턴을 적용한 예제
MVC Framework를 가장 단순한 형태로 알아보기 위해서, 이번 섹션에서는 ASP.NET MVC를 적용한 프로그램을 만들어 볼 것이다. 이 프로그램은 사용자가 선호하는 배송 방법을 책임지는 데 사용할 수 있는 쇼핑 프로그램이다.
먼저, 펼침 목록 형태로 선호하는 배송 방법을 선택하도록 할 것이다. 아울러, 이프로그램에서 이미 사용하고 있는 사용자의 ID가 존재한다고 가정할 것이다
MVC는 헬퍼클래스들을 가지고 구현하면 더 쉽다. 이클래스들을 언제 어디서 사용해야 하는지 좀 더 깊게 공부하고 싶다면 구슬리 형님의 4부로 이루어진 MVC의 심층적인 접근을 참고하면된다