Cú pháp Razor có cung cấp lợi thế hấp dẫn trong đánh dấu giao diện người dùng không?


88

Tôi nhận thấy Scott Guthrie đang bắt đầu đề cập đến Razor một chút trên blog của anh ấy nhưng tôi không chắc rằng nó phù hợp với phong cách của tôi.

Cho rằng đó là một phong cách khá xa lạ đối với một người đã khá quen với loại đánh dấu ASP.Net "tiêu chuẩn" (người giữ vị trí nội dung và mã nội tuyến), nhưng tôi cảm thấy giống như có rất nhiều trang bổ sung để quản lý và đánh dấu ít rõ ràng hơn đối với tôi.

Những người khác cảm thấy thế nào về nó? Đó có phải là điều mà bạn tin rằng cần được xem xét nghiêm túc khi xây dựng các trang MVC mới hay nó chỉ đang cố gắng giải quyết một vấn đề không tồn tại?


3
Tôi thực sự nghĩ rằng cú pháp là dễ dàng đối với những người đã quen thuộc với công cụ xem thông thường. Bạn chỉ cần sử dụng @ thay vì <% và không đóng cốm mã của bạn ...
Jaco Pretorius

Bạn có thể thử công cụ chuyển đổi này . Để biết thêm thông tin, hãy kiểm tra bài đăng trên blog này .
George K

Câu trả lời:


153

[Tuyên bố từ chối trách nhiệm: Tôi là một trong những nhà phát triển của Microsoft trên MVC và Razor, vì vậy tôi có thể hơi thiên vị :)]

Chúng tôi đã thiết kế Razor trở thành một ngôn ngữ tạo mẫu ngắn gọn chỉ sử dụng số lượng ký tự điều khiển cần thiết tối thiểu. Tôi muốn nói rằng phần lớn các chế độ xem của bạn có thể được thể hiện với ít ký tự hơn so với cùng một đoạn mã bằng cách sử dụng cú pháp WebForms "truyền thống".

Ví dụ: đoạn mã sau trong cú pháp ASPX:

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

Có thể được diễn đạt như sau trong Razor:

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

Trong khi phiên bản ASPX có 21 ký tự chuyển tiếp ( <%%>), phiên bản Razor chỉ có ba ký tự ( @)

Tôi có thể nói rằng những ưu điểm của Razor như sau:

  1. Cú pháp ngắn gọn, rất giống với cách bạn viết mã C # thông thường (hãy xem bài đăng trên blog gần đây của Phil Haack so sánh Asxp với cú pháp Razor: http://haacked.com/archive/2011/01/06/razor- cú pháp-quick-reference.aspx )
  2. Mã hóa HTML tự động của đầu ra (giúp bảo vệ bạn khỏi các cuộc tấn công tiêm html)
  3. Tích hợp (mặc dù không phải 100%) xác thực đánh dấu của bạn, giúp bạn tránh các thẻ không cân bằng

Các khái niệm liên quan đến trang cũng dễ dàng ánh xạ từ những gì bạn có trong ASPX

  • Như bạn có thể thấy mã nội tuyến vẫn được phép
  • Các phần (có thể là tùy chọn) tương đương với trình giữ chỗ nội dung
  • Trang bố cục thay vì trang Chính
  • Các khái niệm về chế độ xem toàn bộ và từng phần giống nhau
  • @functions { ... } khối thay vì <script runat="server"> ... </script>

Ngoài ra Razor có một số khái niệm hữu ích mà tôi muốn nói là tốt hơn những gì có sẵn trong ASPX:

  • @helper các hàm để thực sự dễ dàng tạo các hàm phát ra đánh dấu
  • @modeltừ khóa để chỉ định loại mô hình của chế độ xem của bạn mà không cần phải viết lệnh <%@ Page ...với tên lớp đầy đủ

Tôi muốn nghĩ rằng chúng tôi đã giải quyết được một vấn đề thực sự, đó là cho phép bạn dễ dàng viết các dạng xem ngắn gọn và tuân thủ tiêu chuẩn đồng thời cung cấp cho bạn các cách để cấu trúc lại mã chung.

Tất nhiên, không phải ai cũng thích cú pháp, đó là lý do tại sao chúng tôi cũng hỗ trợ hoàn toàn công cụ xem ASPX. Ngoài ra, bạn có thể xem Spark và NHaml, là hai công cụ chế độ xem của bên thứ 3 được cộng đồng theo dõi đáng kể. Bài đăng trên blog sau đây có sự so sánh tốt về các dịch vụ khác nhau: http://blogs.msdn.com/b/coding4fun/archive/2010/10/04/10070953.aspx


7
Cảm ơn vì một câu trả lời thực sự rõ ràng và thấu đáo. Điều này thay đổi ý kiến ​​của tôi đủ để cung cấp cho Razor một cảnh quay tốt.
Phil.Wheeler

2
Aaron, bạn có thể trộn và kết hợp Razor và Aspx với nhau, vì vậy nếu bạn muốn, bạn có thể chuyển đổi dự án của mình thành một trang cùng một lúc (nhược điểm duy nhất là bạn sẽ phải sao chép các trang chính của mình ở định dạng Razor vì có chế độ xem Razor sử dụng trang chủ aspx không được hỗ trợ)
marcind

1
Làm cách nào để bạn đặt dấu @ trong HTML của mình? vd <a href="mailto:john@aol.com">?
Chris S

9
@Chris Thoát khỏi nó:@@
BrunoLM

6
Như một bản cập nhật cho bài đăng này, tôi đã sử dụng Razor trong ba hoặc bốn tháng qua và giờ đã quen với nó, tôi không nghĩ rằng mình có thể thoải mái quay lại đánh dấu ASP.Net truyền thống.
Phil.Wheeler

3

Cá nhân tôi thực sự đánh giá cao việc giảm số lượng ký tự thoát được sử dụng. Việc sử dụng <% %>trở nên rất tẻ nhạt khi so sánh với @{}và gần như không hấp dẫn về mặt cú pháp.

Hơn nữa, việc viết toàn bộ định nghĩa cho phần mã và trang được đơn giản hóa thành một @model model.

Như đã lưu ý bởi marcind, không phải lúc nào cũng bao gồm runat=servercũng rất tốt.

Nhìn chung, tôi thực sự đánh giá cao việc sử dụng công cụ Razor và thấy nó không chỉ giúp tôi phát triển mọi thứ dễ dàng hơn mà còn giúp mã dễ đọc hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.