Razor sözdizimi, UI işaretlemesinde zorlayıcı bir avantaj sağlar mı?


88

Scott Guthrie başlıyor fark Razor söz bir adil biraz blogunda ama sadece değilim benim tarzı için uygun olduğundan emin olduğunu.

"Standart" bir ASP.Net biçimlendirmesine (içerik yer tutucular ve satır içi kod) alışkın biri için oldukça alışılmadık bir tarz olduğu kabul edildi, ancak bu, yönetilmesi gereken çok sayıda ek sayfa ve bana daha az açık işaretleme gibi geliyor.

Diğer insanların bu konudaki duyguları nelerdir? Yeni MVC sayfalarını kurarken ciddiye alınması gerektiğine inandığınız bir şey mi yoksa var olmayan bir sorunu çözmeye mi çalışıyor?


3
Normal görünüm motoruna aşina olan biri için sözdiziminin kolay olduğunu düşündüm. Sadece değil yakın kodunuzu Nuggets yerine% <ait @ kullanmak ve yapmak ...
Jaco Pretorius

Bu dönüştürücüyü deneyebilirsiniz . Daha fazla bilgi için bu blog gönderisine bakın .
George K

Yanıtlar:


153

[Sorumluluk reddi: MVC ve Razor'daki Microsoft geliştiricilerinden biriyim, bu yüzden biraz önyargılı olabilirim :)]

Razor'u yalnızca gerekli minimum miktarda kontrol karakterini kullanan kısa bir şablon dili olarak tasarladık. Görüşlerinizin büyük bölümlerinin "geleneksel" WebForms sözdizimi kullanılarak aynı koddan daha az karakterle ifade edilebileceğini söyleyebilirim.

Örneğin, ASPX sözdiziminde aşağıdaki kod parçacığı:

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

Razor'da şu şekilde ifade edilebilir:

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

ASPX sürümü 21 geçiş karakterine ( <%ve %>) sahipken, Razor sürümünde yalnızca üç ( @)

Razor'un avantajlarının şu şekilde olduğunu söyleyebilirim:

  1. Normal C # kodu yazma biçiminize çok benzeyen kısa sözdizimi (Phil Haack tarafından Asxp'i Razor sözdizimi ile karşılaştıran aşağıdaki son blog gönderisine bakın: http://haacked.com/archive/2011/01/06/razor- syntax-quick-reference.aspx )
  2. Çıktının otomatik HTML kodlaması (sizi html enjeksiyon saldırılarından korumaya yardımcı olur)
  3. Dengesiz etiketlerden kaçınmanıza yardımcı olan işaretlemenizin yerleşik (% 100 olmasa da) doğrulaması

Sayfayla ilgili kavramlar, ASPX'te sahip olduklarınızdan da kolayca eşleşir

  • Gördüğünüz gibi satır içi koda hala izin veriliyor
  • Bölümler (isteğe bağlı olabilir) içerik yer tutuculara eşdeğerdir
  • Ana sayfalar yerine düzen sayfaları
  • Tam ve kısmi görünüm kavramları aynıdır
  • @functions { ... } yerine bloklar <script runat="server"> ... </script>

Ek olarak, Razor'un ASPX'te mevcut olandan daha iyi olduğunu söyleyebileceğim bir dizi yararlı kavram vardır:

  • @helper işaretleme yayan işlevlerin gerçekten kolay oluşturulması için işlevler
  • @model<%@ Page ...tam sınıf adıyla bir yönerge yazmak zorunda kalmadan görünümünüzün model türünü belirtmek için anahtar sözcük

Gerçek bir sorunu çözdüğümüzü düşünmek isterim; bu, size daha kolay özlü ve standartlara uygun görüşler yazmanıza izin verirken, aynı zamanda ortak kodu yeniden düzenlemenin yollarını da sunacak.

Elbette, herkes sözdizimini tercih etmeyecektir, bu yüzden ASPX görünüm motorunu da tam olarak destekliyoruz. Ek olarak, önemli topluluk takibinden zevk alan iki 3. taraf görüntüleme motoru olan Spark ve NHaml'ı da kontrol edebilirsiniz. Aşağıdaki blog yazısı, farklı tekliflerin iyi bir karşılaştırmasına sahiptir: http://blogs.msdn.com/b/coding4fun/archive/2010/10/04/10070953.aspx


@marcind, tamamen konu dışı ama relaxedUrlToFileSystemMappingyeni Web Sayfaları ile nasıl çalışılacağı hakkında herhangi bir fikriniz var . Bu MVC 2.0'da iyi çalışırken ", MVC 3.0'da bir url'ye sahip olmak her zaman yol istisnasında geçersiz karakterler atar.
Darin Dimitrov

7
Gerçekten net ve kapsamlı bir cevap için teşekkürler. Bu, Razor'a iyi bir şans verecek kadar fikirlerimi değiştirdi.
Phil.Wheeler

2
Aaron, Razor ve Aspx'i birlikte karıştırıp eşleştirebilirsiniz, böylece projenizi bir seferde bir sayfa dönüştürebilirsiniz (tek dezavantajı, Razor görünümüne sahip olmak bir Razor biçiminde ana sayfalarınızı aspx ana sayfası desteklenmiyor)
marcind

1
HTML'nize nasıl @ işareti koyarsınız? örneğin <a href="mailto:john@aol.com">?
Chris S

6
Bu gönderiye bir güncelleme olarak, Razor'u son üç veya dört aydır kullanıyorum ve artık alışmış olduğum için geleneksel ASP.Net işaretlemesine rahatça geri dönebileceğimi sanmıyorum.
Phil.Wheeler

3

Şahsen, kaç kaçış karakterinin kullanıldığındaki azalmayı gerçekten takdir ediyorum. Kullanmak ile <% %>karşılaştırıldığında çok sıkıcı oluyor @{}ve sözdizimsel olarak neredeyse çekici değil.

Dahası, kod türü ve sayfa için tam bir tanım yazmak tek bir sayfaya dönüştürülmüştür @model model.

Marcind'in de belirttiği gibi, her zaman dahil etmek zorunda olmamak runat=serverda çok güzel.

Genel olarak, Razor motorunu kullanmayı gerçekten takdir ediyorum ve bunun yalnızca işleri geliştirmemi kolaylaştırmakla kalmayıp aynı zamanda kodun okunmasını da kolaylaştırdığını görüyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.