ASP.NET MVC View Engine Comparison




asp.net-mvc spark-view-engine (4)

ASP.NET MVC View Engines (ويكي المجتمع)

نظرًا لعدم ظهور قائمة شاملة ، فلنبدأ هنا على SO. هذا يمكن أن يكون ذا قيمة كبيرة لمجتمع ASP.NET MVC إذا أضف الناس تجربتهم (esp. أي شخص ساهم في واحدة من هذه). أي شيء تنفيذ IViewEngine (على سبيل المثال VirtualPathProviderViewEngine ) هي لعبة عادلة هنا. فقط أبجديًا بمحركات عرض جديدة (ترك WebFormViewEngine و Razor في الأعلى) ، وحاول أن تكون موضوعيًا في المقارنات.

System.Web.Mvc.WebFormViewEngine

أهداف التصميم:

محرك عرض يُستخدم لتقديم صفحة "نماذج ويب" إلى الاستجابة.

الايجابيات:

  • في كل مكان لأنه يشحن مع ASP.NET MVC
  • تجربة مألوفة لمطوري ASP.NET
  • التحسس
  • يمكن اختيار أي لغة مع مزود CodeDom (على سبيل المثال C # ، VB.NET ، F # ، Boo ، Nemerle)
  • تجميع عند الطلب أو طرق عرض precompiled

سلبيات:

  • يتم الخلط بين الاستخدام من خلال وجود أنماط "ASP.NET الكلاسيكية" التي لم تعد تنطبق في MVC (على سبيل المثال ViewState PostBack)
  • يمكن أن تساهم في مكافحة نمط "حساء العلامة"
  • يمكن بناء جملة كتلة الكود و كتابة قوية في الطريق
  • IntelliSense يفرض نمط غير مناسب دائمًا لكتل ​​التعليمات البرمجية المضمنة
  • يمكن أن تكون صاخبة عند تصميم قوالب بسيطة

مثال:

<%@ Control Inherits="System.Web.Mvc.ViewPage<IEnumerable<Product>>" %>
<% if(model.Any()) { %>
<ul>
    <% foreach(var p in model){%>
    <li><%=p.Name%></li>
    <%}%>
</ul>
<%}else{%>
    <p>No products available</p>
<%}%>

System.Web.Razor

أهداف التصميم:

الايجابيات:

  • مدمجة ومعبرة وسوائل
  • سهل التعلم
  • ليست لغة جديدة
  • لديه انتفاضة كبيرة
  • وحدة قابلة للاختبار
  • في كل مكان ، السفن مع ASP.NET MVC

سلبيات:

  • ينشئ مشكلة مختلفة قليلاً عن "حساء العلامة" المشار إليه أعلاه. عندما توفر علامات الخادم فعليًا بنية حول الخادم والشفرة غير الخادمة ، يخلط Razor HTML ورمز الخادم ، مما يجعل تطوير HTML أو JS خالصًا أمرًا صعبًا (راجع Con Example # 1) لأنك ستضطر إلى "HTML" و / أو JavaScript العلامات تحت بعض الشروط الشائعة جدا.
  • سوء التجليد + إعادة الاستخدام: من غير العملي استدعاء قالب موسر كما لو كان طريقة عادية - في الممارسة العملية يمكن أن يطلق الشفرة الشفرة ولكن ليس العكس ، الأمر الذي يمكن أن يشجع على خلط الكود والعرض التقديمي.
  • بناء الجملة هو جدا html المنحى ؛ توليد محتوى غير html يمكن أن تكون خادعة. وبالرغم من ذلك ، فإن نموذج بيانات razor هو في الأساس سلسلة تسلسلية فقط ، لذلك لا يتم الكشف عن الأخطاء اللغوية وأخطاء التعشيش بشكل ثابت أو ديناميكي ، على الرغم من أن تصميم وقت التصميم لـ VS.NET يخفف هذا إلى حد ما. قابلية الصيانة و refactorability يمكن أن تعاني بسبب هذا.
  • لا توجد واجهة برمجة تطبيقات موثقة ، http://msdn.microsoft.com/en-us/library/system.web.razor.aspx

Con Example # 1 (notice the place of "string [] ..."):

@{
    <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
    foreach (var person in teamMembers)
    {
        <p>@person</p>
    }
}

Bellevue

أهداف التصميم:

  • احترام HTML كلغة من الدرجة الأولى بدلا من التعامل معها على أنها "نص عادل".
  • لا تعبث مع بلدي HTML! يجب أن تكون شفرة ربط البيانات (شفرة Bellevue) منفصلة عن HTML.
  • فرض فصل عرض نموذج صارم

Brail

أهداف التصميم:

لقد تم تحويل محرك عرض Brail من MonoRail للعمل مع Microsoft ASP.NET MVC Framework. للحصول على مقدمة إلى Brail ، انظر الوثائق على موقع مشروع Castle .

الايجابيات:

  • على غرار "بناء جملة بيثون الصداقة للمعصم"
  • طرق عرض مجمعة حسب الطلب (ولكن لا يتوفر تحليل مسبق)

سلبيات:

  • مصممة لتكون مكتوبة بلغة Boo

مثال:

<html>    
<head>        
<title>${title}</title>
</head>    
<body>        
     <p>The following items are in the list:</p>  
     <ul><%for element in list:    output "<li>${element}</li>"%></ul>
     <p>I hope that you would like Brail</p>    
</body>
</html>

Hasic

يستخدم Hasic معرفات XML الخاصة بـ VB.NET بدلاً من سلاسل مثل معظم محركات العرض الأخرى.

الايجابيات:

  • التحقق من وقت التحويل البرمجي لـ XML الصالحة
  • التلوين التركيبي
  • التحلل الكامل
  • وجهات النظر جمعت
  • التوسعة باستخدام الطبقات CLR العادية ، والوظائف ، وما إلى ذلك
  • انسيابية والتلاعب السلس لأنه رمز VB.NET العادية
  • وحدة قابلة للاختبار

سلبيات:

  • الأداء: يبني DOM بالكامل قبل إرساله إلى العميل.

مثال:

Protected Overrides Function Body() As XElement
    Return _
    <body>
        <h1>Hello, World</h1>
    </body>
End Function

NDjango

أهداف التصميم:

NDjango هو تنفيذ لغة قالب Django على منصة. NET ، وذلك باستخدام لغة F # .

الايجابيات:

NHaml

أهداف التصميم:

ميناء. NET من ريلز هامل محرك الرأي. من موقع Haml :

Haml هي لغة ترميزية تُستخدم لتنظيف وصف XHTML لأي مستند ويب بكل بساطة ، دون استخدام شفرة مضمنة ... يتجنب Haml الحاجة إلى ترميز واضح لـ XHTML في القالب ، لأنه في الواقع وصفًا مجردًا لـ XHTML ، مع بعض التعليمات البرمجية لإنشاء محتوى ديناميكي.

الايجابيات:

  • بنية مقطوعة (أي جافة)
  • حسن البادئة
  • هيكل واضح
  • C # Intellisense (لـ VS2008 دون ReSharper)

سلبيات:

  • تجريد من XHTML بدلا من الاستفادة من الألفة من الترميز
  • لا Intellisense ل VS2010

مثال:

@type=IEnumerable<Product>
- if(model.Any())
  %ul
    - foreach (var p in model)
      %li= p.Name
- else
  %p No products available

NVelocityViewEngine (MvcContrib)

أهداف التصميم:

محرك عرض يستند إلى NVelocity وهو منفذ .NET من Project Java الشهير Velocity .

الايجابيات:

  • سهل القراءة / الكتابة
  • رمز العرض المختصر

سلبيات:

  • عدد محدود من طرق المساعد المتاحة في العرض
  • لا يحتوي على تكامل Visual Studio تلقائيًا (التحسس الذكي أو التحقق من وقت التحويل البرمجي أو إعادة بيعها)

مثال:

#foreach ($p in $viewdata.Model)
#beforeall
    <ul>
#each
    <li>$p.Name</li>
#afterall
    </ul>
#nodata 
    <p>No products available</p>
#end

SharpTiles

أهداف التصميم:

SharpTiles عبارة عن منفذ جزئي لـ JSTL مدمج بمفهوم خلف إطار Tiles (اعتبارًا من Mile stone 1).

الايجابيات:

  • مألوفة لمطوري جافا
  • كتل التعليمات البرمجية لنمط XML

سلبيات:

  • ...

مثال:

<c:if test="${not fn:empty(Page.Tiles)}">
  <p class="note">
    <fmt:message key="page.tilesSupport"/>
  </p>
</c:if>

سبارك مشاهدة المحرك

أهداف التصميم:

تكمن الفكرة في السماح لـ html بالسيطرة على التدفق والشفرة لتلائمها بسلاسة.

الايجابيات:

  • ينتج قوالب أكثر قابلية للقراءة
  • C # Intellisense (لـ VS2008 دون ReSharper)
  • SparkSense plug-in لـ VS2010 (يعمل مع ReSharper)
  • يوفر ميزة Bindings قوية للتخلص من جميع التعليمات البرمجية في وجهات نظرك ويسمح لك بسهولة ابتكار علامات HTML الخاصة بك

سلبيات:

  • لا فصل واضح لمنطق القالب من الترميز الحرفي (يمكن التخفيف من ذلك بواسطة بادئات مساحة الاسم)

مثال:

<viewdata products="IEnumerable[[Product]]"/>
<ul if="products.Any()">
    <li each="var p in products">${p.Name}</li>
</ul>
<else>
    <p>No products available</p>
</else>

<Form style="background-color:olive;">
    <Label For="username" />
    <TextBox For="username" />
    <ValidationMessage For="username" Message="Please type a valid username." />
</Form>

StringTemplate View Engine MVC

أهداف التصميم:

  • وزن خفيف. لا يتم إنشاء أي فئات للصفحات.
  • بسرعة. تتم كتابة القوالب إلى دفق إخراج الاستجابة.
  • المخبأة. يتم تخزين القوالب مؤقتًا ، ولكنها تستخدم FileSystemWatcher لاكتشاف تغييرات الملف.
  • ديناميكية. يمكن إنشاء قوالب على الطاير في التعليمات البرمجية.
  • مرونة. يمكن أن تكون متداخلة قوالب إلى أي مستوى.
  • تمشيا مع مبادئ MVC. يعزز فصل واجهة المستخدم والمنطق الأعمال. يتم إنشاء جميع البيانات في وقت مبكر ، وتنتقل إلى القالب.

الايجابيات:

  • مألوفة لمطوري جافا StringTemplate

سلبيات:

  • يمكن أن يتداخل تركيب القالب التبسيطي مع الناتج المقصود (على سبيل المثال ، نزاع jQuery )

الجناح يدق

Wing Beats هو DSL داخلي لإنشاء XHTML. تعتمد على F # وتتضمن محرك عرض ASP.NET MVC ، ولكن يمكن استخدامها أيضًا فقط من أجل قدرتها على إنشاء XHTML.

الايجابيات:

  • التحقق من وقت التحويل البرمجي لـ XML الصالحة
  • التلوين التركيبي
  • التحلل الكامل
  • وجهات النظر جمعت
  • التوسعة باستخدام الطبقات CLR العادية ، والوظائف ، وما إلى ذلك
  • قابلية التركيب السلس والتلاعب حيث إنه رمز F # عادي
  • وحدة قابلة للاختبار

سلبيات:

  • أنت لا تكتب HTML فعليًا إلا رمزًا يمثل HTML في DSL.

XsltViewEngine (MvcContrib)

أهداف التصميم:

يبني وجهات النظر من XSLT مألوفة

الايجابيات:

  • على نطاق واسع في كل مكان
  • لغة قالب مألوفة لمطوري XML
  • XML القائم
  • اجتازت اختبار الزمن
  • يمكن اكتشاف أخطاء تداخل العناصر والأركان بشكل ثابت.

سلبيات:

  • نمط اللغة الوظيفية يجعل السيطرة على التدفق صعبة
  • XSLT 2.0 (ربما؟) غير مدعوم. (XSLT 1.0 هو أقل عملية بكثير).

لقد قمت بالبحث في SO & Google للحصول على تصنيف لمحركات العرض المختلفة المتوفرة لـ ASP.NET MVC ، ولكن لم تجد أكثر بكثير من مجرد أوصاف بسيطة عالية المستوى لما هو محرك الرؤية.

أنا لا أبحث بالضرورة عن "الأفضل" أو "الأسرع" ، بل بالأحرى بعض مقارنات العالم الحقيقي لمزايا / عيوب اللاعبين الرئيسيين (مثل WebFormViewEngine الافتراضي ، MvcContrib View Engines ، إلخ) لمختلف المواقف. أعتقد أن هذا سيكون مفيدًا في تحديد ما إذا كان التبديل من المحرك الافتراضي سيكون مفيدًا لمشروع معين أو لمجموعة تطوير.

وقد واجه أي شخص مثل هذه المقارنة؟


أعتقد أن هذه القائمة يجب أن تتضمن أيضًا نماذج لكل محرك مشاهدة بحيث يمكن للمستخدمين الحصول على نكهة لكل منهم دون الحاجة إلى زيارة كل موقع إلكتروني.

الصور تقول ألف كلمة وعينات العلامات هي مثل لقطات لمحركات العرض :) لذا ها هي واحدة من محرك عرض سبارك المفضل

<viewdata products="IEnumerable[[Product]]"/>
<ul if="products.Any()">
  <li each="var p in products">${p.Name}</li>
</ul>
<else>
  <p>No products available</p>
</else>

أنا أحب ndjango . فمن السهل جدا استخدام ومرنة للغاية. يمكنك توسيع وظيفة العرض بسهولة باستخدام علامات ومرشحات مخصصة. أعتقد أن "مرتبطة بشكل كبير بـ F #" هي ميزة بدلاً من العيب.


تحقق من هذا SharpDOM . هذا هو ac # 4.0 الداخلية dsl لتوليد HTML وكذلك محرك asp.net mvc view.





razor