[asp.net-mvc] Razor 구문은 UI 마크 업에서 강력한 이점을 제공합니까?

Scott Guthrie가 그의 블로그에서 Razor상당히 언급 하기 시작 했음을 알지만 제 스타일에 잘 맞는지 확신 할 수 없습니다.

“표준”종류의 ASP.Net 마크 업 (컨텐츠 플레이스 홀더 및 인라인 코드)에 꽤 익숙한 사람에게는 상당히 익숙하지 않은 스타일이지만 관리해야 할 추가 페이지가 많고 마크 업이 명확하지 않은 것 같습니다.

그것에 대한 다른 사람들의 감정은 무엇입니까? 새로운 MVC 페이지를 스캐 폴딩 할 때 진지하게 고려해야한다고 생각하는 것입니까, 아니면 존재하지 않는 문제를 해결하려는 것입니까?



답변

[면책 조항 : 저는 MVC 및 Razor의 Microsoft 개발자 중 하나이므로 약간 편견이있을 수 있습니다. :)]

Razor는 필요한 최소한의 제어 문자 만 사용하는 간결한 템플릿 언어로 설계되었습니다. “전통적인”WebForms 구문을 사용하여 동일한 코드보다 적은 수의 문자로 뷰의 많은 부분을 표현할 수 있습니다.

예를 들어 ASPX 구문의 다음 코드 조각 :

<% if(someCondition) { %>
  <ol>
  <% foreach(var item in Model) { %>
     <li><%: item.ToString() %></li>
  <% } %>
  </ol>
<% } %>

Razor에서 다음과 같이 표현할 수 있습니다.

@if(someCondition) {
   <ol>
   @foreach(var item in Model) {
      <li>@item.ToString()</li>
   }
   </ol>
}

ASPX 버전에는 21 개의 전환 문자 ( <%%>)가 있지만 Razor 버전에는 3 개 ( @) 만 있습니다.

Razor의 장점은 다음과 같습니다.

  1. 일반 C # 코드를 작성하는 방법과 매우 유사한 간결한 구문 (Asxp와 Razor 구문을 비교하는 Phil Haack의 다음 최근 블로그 게시물을 확인하십시오. http://haacked.com/archive/2011/01/06/razor- 구문 -quick-reference.aspx )
  2. 출력의 자동 HTML 인코딩 (HTML 주입 공격으로부터 보호)
  3. 태그 불균형을 방지하는 데 도움이되는 마크 업의 내장 (100 %는 아님) 유효성 검사

페이지 관련 개념도 ASPX에있는 것과 쉽게 매핑됩니다.

  • 보시다시피 인라인 코드는 여전히 허용됩니다.
  • 섹션 (선택 사항 일 수 있음)은 콘텐츠 자리 표시 자와 동일합니다.
  • 마스터 페이지 대신 레이아웃 페이지
  • 전체보기와 부분보기의 개념은 동일합니다.
  • @functions { ... } 대신 블록 <script runat="server"> ... </script>

또한 Razor에는 ASPX에서 사용할 수있는 것보다 낫다고 말할 수있는 유용한 개념이 많이 있습니다.

  • @helper 마크 업을 생성하는 함수를 정말 쉽게 만들 수있는 함수
  • @model<%@ Page ...전체 클래스 이름으로 지시문 을 작성할 필요없이 뷰의 모델 유형을 지정하기위한 키워드

저는 우리가 실제 문제를 해결했다고 생각합니다. 이것은 여러분이 더 쉽게 간결하고 표준을 준수하는 뷰를 작성하는 동시에 공통 코드를 리팩토링하는 방법을 제공하는 것입니다.

물론 모든 사람이 구문을 선호하는 것은 아니기 때문에 ASPX 뷰 엔진도 완전히 지원하고 있습니다. 또한 중요한 커뮤니티 팔로우를 즐기는 두 개의 타사 뷰 엔진 인 Spark 및 NHaml을 확인할 수 있습니다. 다음 블로그 게시물은 여러 제품을 잘 비교 한 것입니다. http://blogs.msdn.com/b/coding4fun/archive/2010/10/04/10070953.aspx


답변

개인적으로 사용되는 이스케이프 문자 수를 줄이는 것에 대해 정말 감사드립니다. 사용 <% %>은 비교할 때 매우 지루해 @{}지며 구문 적으로 거의 매력적이지 않습니다.

또한 코드 숨김 및 페이지에 대한 전체 정의를 작성하는 것이 단일 @model model.

marcind도 언급했듯이 항상 포함 할 필요 runat=server가 없는 것도 매우 좋습니다.

전반적으로 Razor 엔진을 사용해 주셔서 감사 드리며, 개발이 더 쉬워 질뿐만 아니라 코드를 더 쉽게 읽을 수 있습니다.


답변