سؤال

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

أنا لا أبحث بالضرورة عن "أفضل" أو "أسرع" ولكن بعض مقارنات العالم الحقيقي لمزايا / عيوب اللاعبين الرئيسيين (مثل محركات عرض WebFormView الافتراضية، ومحركات عرض MVCContrib، إلخ) للحالات المختلفة. أعتقد أن هذا سيكون مفيدا حقا في تحديد ما إذا كان التبديل من المحرك الافتراضي سيكون مفيدا لمجموعة معينة أو مجموعة تطوير.

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

هل كانت مفيدة؟

المحلول

ASP.NET MVC عرض محركات (المجتمع Wiki)

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


system.web.mvc.webforwengine.

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

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

الايجابيات:

  • في كل مكان لأنه يشحن مع ASP.NET MVC
  • تجربة مألوفة للمطورين ASP.NET
  • intressisense.
  • يمكن اختيار أي لغة مع مزود Codedom (مثل C #، VB.NET، F #، BOO، NEMERLE)
  • تجميع عند الطلب أو precompiled. الآراء

سلبيات:

  • يتم الخلط بين الاستخدام من خلال وجود أنماط "ASP.NET الكلاسيكية" التي لم تعد تنطبق في MVC (مثل عودة العاشكات)
  • يمكن أن تسهم في مكافحة نمط "حساء العلامة"
  • بناء جملة كتلة الكود والكتابة القوية يمكن أن تحصل على الطريق
  • 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.

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

الايجابيات:

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

سلبيات:

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

يخدع المثال رقم 1 (لاحظ وضع "سلسلة [] ..."):

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

بيلفو

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

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

برايل

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

تم استيعاب محرك الرؤية البراك من الأحادي إلى العمل مع إطار Microsoft ASP.NET MVC. للحصول على مقدمة في البراء، انظر الوثائق على مشروع القلعة الموقع.

الايجابيات:

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

سلبيات:

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

مثال:

<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>

HADIC.

يستخدم HASIC حرفي XML في VB.NET بدلا من سلاسل مثل معظم محركات المشاهدة الأخرى.

الايجابيات:

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

سلبيات:

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

مثال:

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

ndjango.

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

ndjango هو تنفيذ لغة قالب DJANGO على منصة .NET، باستخدام f # language..

الايجابيات:


نهم

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

.NET ميناء القضبان محرك عرض الهمال. من موقع هامل:

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

الايجابيات:

  • هيكل TERSE (أي جفاف)
  • حسنا بادئة
  • هيكل واضح
  • ج # intellisense. (ل vs2008 دون إعادة التجسيد)

سلبيات:

  • تجريد من 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 من مشروع جافا الشهير السرعة الاتجاهية.

الايجابيات:

  • من السهل القراءة / الكتابة
  • موجزة عرض الرمز

سلبيات:

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

مثال:

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

Sharptiles.

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

Sharptiles هو منفذ جزئي jstl.جنبا إلى جنب مع مفهوم وراء إطار البلاط (اعتبارا من ميل ميل 1).

الايجابيات:

  • مألوف لمطوري Java
  • كتل رمز نمط XML

سلبيات:

  • ...

مثال:

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

شرارة عرض المحرك

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

الفكرة هي السماح ل HTML بالسيطرة على التدفق والرمز لتناسب بسلاسة.

الايجابيات:

  • تنتج قوالب أكثر قابلية للقراءة
  • ج # intellisense. (ل vs2008 دون إعادة التجسيد)
  • spantsense المكونات ل vs2010 (يعمل مع إعادة التجسيد)
  • يوفر قوية ميزة الارتباطات للتخلص من الكل الرمز في وجهات نظرك ويسمح لك باخترانات علامات 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 عرض المحرك MVC

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

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

الايجابيات:

  • مألوفة في StringTemplate مطوري Java

سلبيات:

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

يدق الجناح

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

الايجابيات:

  • التحقق من الوقت التحقق من XML صالح
  • بناء جملة التلوين
  • التحسس الذكي الكامل
  • وجهات النظر المترجمة
  • التسعة باستخدام فصول CLR العادية، وظائف، إلخ
  • قابلية التوافق والتلاعب غير الملحومة نظرا لعدم وجود رمز
  • وحدة اختبار

سلبيات:

  • لا تكتب حقا HTML ولكن التعليمات البرمجية التي تمثل HTML في DSL.

XSLTViewEngine (MVCContrib)

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

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

الايجابيات:

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

سلبيات:

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

نصائح أخرى

خياري الحالي هو الحلاقة. إنه نظيف للغاية وسهل القراءة ويحافظ على صفحات العرض سهلة الصيانة. هناك أيضا دعم Intellisense وهو رائع حقا. ALOS، عند استخدامها مع مساعدو الويب هو قوي جدا أيضا.

لتوفير عينة بسيطة:

@Model namespace.model
<!Doctype html>
<html>
<head>
<title>Test Razor</title>
</head>
<body>
<ul class="mainList">
@foreach(var x in ViewData.model)
{
<li>@x.PropertyName</li>
}
</ul>
</body>

وهناك لديك. هذا نظيف للغاية وسهل القراءة. منحت، وهذا مثال بسيط ولكن حتى في الصفحات والأشكال المعقدة، لا يزال من السهل جدا قراءة وفهم.

كما هو الحالات؟ حسنا، حتى الآن (أنا جديد على هذا) عند استخدام بعض المساعدين في النماذج، هناك نقص في الدعم لإضافة مرجع فئة CSS وهو مزعج قليلا.

شكرا nathj07.

أعلم أن هذا لا يجيب حقا على سؤالك، لكن محركات مشاهدة مختلفة لها أغراض مختلفة. ال شرارة عرض المحرك, على سبيل المثال، يهدف إلى تخليص وجهات نظرك "حساء العلامة" من خلال محاولة جعل كل شيء بطلاقة وقابلة للقراءة.

أفضل رهان الخاص بك هو أن ننظر فقط إلى بعض التطبيقات. إذا كان يبدو جذابا بقصد حلكم، فجربه. يمكنك خلط ومطابقة محركات عرض المحركات في MVC، لذلك لا ينبغي أن تكون مشكلة إذا قررت عدم الذهاب مع محرك معين.

افحص هذا شحذ وبعد هذا هو AC # 4.0 DSL الداخلي لتوليد HTML وأيضا محرك عرض ASP.NET MVC.

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

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

تقول الصور ألف كلمة و عينات الترميز هي لقطات الشاشة لعرض محركات :) حتى هنا واحد من المفضل لدي شرارة عرض المحرك

<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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top