asp.net mvc - एएसपी.नेट एमवीसी व्यू इंजन तुलना




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

एएसपी.नेट एमवीसी व्यू इंजन (सामुदायिक विकी)

चूंकि एक व्यापक सूची मौजूद नहीं है, आइए एसओ पर यहां एक शुरू करें। अगर लोग अपना अनुभव जोड़ते हैं तो यह एएसपी.नेट एमवीसी समुदाय के लिए बहुत महत्वपूर्ण हो सकता है (एसएसपी। इनमें से किसी एक में योगदान करने वाले)। IViewEngine लागू करने IViewEngine कुछ भी (जैसे IViewEngine ) यहां उचित खेल है। बस नए व्यू इंजनों को वर्णित करें (शीर्ष पर WebFormViewEngine और रेजर छोड़कर), और तुलना में उद्देश्य बनने का प्रयास करें।

System.Web.Mvc.WebFormViewEngine

डिजाइन लक्ष्य:

एक व्यू इंजन जिसका उपयोग वेब फॉर्म पेज को प्रतिक्रिया में प्रस्तुत करने के लिए किया जाता है।

पेशेवरों:

  • यह सर्वव्यापी है क्योंकि यह एएसपी.नेट एमवीसी के साथ जहाज है
  • एएसपी.नेट डेवलपर्स के लिए परिचित अनुभव
  • IntelliSense
  • कोडडॉम प्रदाता (जैसे सी #, वीबी.नेट, एफ #, बू, नेमेरल) के साथ किसी भी भाषा का चयन कर सकते हैं
  • मांग पर संकलन या precompiled विचार

विपक्ष:

  • उपयोग "क्लासिक एएसपी.नेट" पैटर्न के अस्तित्व से भ्रमित है जो अब एमवीसी में लागू नहीं होता है (उदाहरण के लिए व्यूस्टेट पोस्टबैक)
  • "टैग सूप" के विरोधी पैटर्न में योगदान कर सकते हैं
  • कोड-ब्लॉक सिंटैक्स और मजबूत-टाइपिंग रास्ते में मिल सकती है
  • 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

डिजाइन लक्ष्य:

पेशेवरों:

  • कॉम्पैक्ट, अभिव्यक्तिपूर्ण, और द्रव
  • सीखने में आसान
  • एक नई भाषा नहीं है
  • महान इंटेलिजेंस है
  • यूनिट टेस्टेबल
  • सर्वव्यापी, एएसपी.नेट एमवीसी के साथ जहाजों

विपक्ष:

  • उपरोक्त संदर्भित "टैग सूप" से थोड़ा अलग समस्या पैदा करता है। जहां सर्वर टैग वास्तव में सर्वर और गैर-सर्वर कोड के चारों ओर संरचना प्रदान करते हैं, तो रेजर एचटीएमएल और सर्वर कोड को भ्रमित कर देता है, शुद्ध HTML या जेएस विकास को चुनौतीपूर्ण बनाता है (कॉन उदाहरण # 1 देखें) क्योंकि आप एचटीएमएल और / या जावास्क्रिप्ट को "बचाना" कुछ बहुत ही सामान्य स्थितियों के तहत टैग।
  • गरीब encapsulation + पुन: प्रयोज्यता: एक रेज़र टेम्पलेट को कॉल करने के लिए अव्यवहारिक है जैसे कि यह एक सामान्य विधि थी - अभ्यास में रेजर कोड कॉल कर सकता है लेकिन विपरीत नहीं, जो कोड और प्रस्तुति के मिश्रण को प्रोत्साहित कर सकता है।
  • सिंटेक्स बहुत एचटीएमएल उन्मुख है; गैर-एचटीएमएल सामग्री उत्पन्न करना मुश्किल हो सकता है। इसके बावजूद, रेज़र का डेटा मॉडल अनिवार्य रूप से केवल स्ट्रिंग-कॉन्सटेनेशन है, इसलिए वाक्यविन्यास और घोंसले की त्रुटियां न तो स्थिर और न ही गतिशील रूप से पाई जाती हैं, हालांकि वीएस.NET डिज़ाइन-टाइम सहायता कुछ हद तक कम हो जाती है। रखरखाव और रिफैक्टरिबिलिटी इस वजह से पीड़ित हो सकती है।
  • कोई दस्तावेज एपीआई नहीं , 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>
    }
}

Bellevue

डिजाइन लक्ष्यों:

  • एचटीएमएल को प्रथम श्रेणी की भाषा के रूप में सम्मानित करें क्योंकि इसे "बस पाठ" के रूप में पेश करने का विरोध किया गया है।
  • मेरे एचटीएमएल के साथ गड़बड़ मत करो! डेटा बाध्यकारी कोड (Bellevue कोड) HTML से अलग होना चाहिए।
  • सख्त मॉडल-व्यू अलगाव लागू करें

Brail

डिजाइन लक्ष्य:

ब्रेल व्यू इंजन को माइक्रोसॉफ्ट से माइक्रोसॉफ्ट एएसपी.नेट एमवीसी फ्रेमवर्क के साथ काम करने के लिए पोर्ट किया गया है। ब्राइल के परिचय के लिए, कैसल प्रोजेक्ट वेबसाइट पर प्रलेखन देखें।

पेशेवरों:

  • "कलाई के अनुकूल पायथन वाक्यविन्यास" के बाद मॉडलिंग
  • ऑन-डिमांड संकलित विचार (लेकिन कोई प्रीकंपिलेशन उपलब्ध नहीं है)

विपक्ष:

  • भाषा 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

हसीक अधिकांश अन्य व्यू इंजनों जैसे तारों की बजाय वीबी.नेट के एक्सएमएल अक्षरों का उपयोग करता है।

पेशेवरों:

  • वैध एक्सएमएल की संकलन-समय की जांच
  • सिंटेक्स रंग
  • पूर्ण इंटेलिजेंस
  • संकलित विचार
  • नियमित सीएलआर कक्षाओं, कार्यों, आदि का उपयोग कर विस्तारशीलता
  • निर्बाध composability और हेरफेर क्योंकि यह नियमित VB.NET कोड है
  • यूनिट टेस्टेबल

विपक्ष:

  • प्रदर्शन: क्लाइंट को भेजने से पहले पूरे डोम बनाता है।

उदाहरण:

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

NDjango

डिजाइन लक्ष्य:

एनडीजेंगो एफ # भाषा का उपयोग करते हुए .NET प्लेटफ़ॉर्म पर Django टेम्पलेट भाषा का कार्यान्वयन है।

पेशेवरों:

NHaml

डिजाइन लक्ष्य:

रेल के हैमल व्यू इंजन के .NET पोर्ट। हमल वेबसाइट से :

हैमल एक मार्कअप भाषा है जिसका उपयोग इनलाइन कोड के उपयोग के बिना किसी भी वेब दस्तावेज़ के एक्सएचटीएमएल को साफ और आसानी से करने के लिए किया जाता है ... हैमल टेम्पलेट में एक्सएचटीएमएल को स्पष्ट रूप से कोड करने की आवश्यकता से बचाता है, क्योंकि यह वास्तव में एक्सएचटीएमएल का एक सार वर्णन है , गतिशील सामग्री उत्पन्न करने के लिए कुछ कोड के साथ।

पेशेवरों:

  • terse संरचना (यानी डीआरवाई)
  • अच्छी तरह से इंडेंट
  • स्पष्ट संरचना
  • सी # इंटेलिसेंस (वीएस 2008 के लिए रीशेपर के बिना)

विपक्ष:

  • मार्कअप की परिचितता का लाभ उठाने के बजाय एक्सएचटीएमएल से एक अमूर्तता
  • वीएस -2010 के लिए कोई इंटेलिजेंस नहीं

उदाहरण:

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

NVelocityViewEngine (MvcContrib)

डिजाइन लक्ष्य:

NVelocity पर आधारित एक व्यू इंजन जो लोकप्रिय जावा प्रोजेक्ट Velocity का .NET पोर्ट है।

पेशेवरों:

  • पढ़ने / लिखने में आसान है
  • संक्षिप्त दृश्य कोड

विपक्ष:

  • दृश्य पर उपलब्ध सहायक संख्याओं की सीमित संख्या
  • स्वचालित रूप से विजुअल स्टूडियो एकीकरण नहीं होता है (IntelliSense, दृश्यों की संकलन-समय की जांच, या refactoring)

उदाहरण:

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

SharpTiles

डिजाइन लक्ष्य:

शार्पटाइल्स जेएसटीएल का आंशिक बंदरगाह है जो टाइल ढांचे के पीछे अवधारणा के साथ संयुक्त है (माइल पत्थर 1 के रूप में)।

पेशेवरों:

  • जावा डेवलपर्स से परिचित
  • एक्सएमएल शैली कोड ब्लॉक

विपक्ष:

  • ...

उदाहरण:

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

स्पार्क व्यू इंजन

डिजाइन लक्ष्य:

विचार है कि एचटीएमएल प्रवाह को हावी होने और कोड को निर्बाध रूप से फिट करने की अनुमति देना है।

पेशेवरों:

विपक्ष:

  • शाब्दिक मार्कअप से टेम्पलेट तर्क का कोई स्पष्ट अलगाव नहीं है (इसे नेमस्पेस उपसर्गों द्वारा कम किया जा सकता है)

उदाहरण:

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

स्ट्रिंग टेम्पलेट देखें इंजन एमवीसी

डिजाइन लक्ष्य:

  • लाइटवेट। कोई पृष्ठ कक्षाएं नहीं बनाई गई हैं।
  • फास्ट। टेम्पलेट्स प्रतिक्रिया आउटपुट स्ट्रीम में लिखे गए हैं।
  • कैश्ड। टेम्पलेट्स कैश किए जाते हैं, लेकिन फ़ाइल परिवर्तनों का पता लगाने के लिए एक FileSystemWatcher का उपयोग करें।
  • गतिशील। कोड में फ्लाई पर टेम्पलेट जेनरेट किए जा सकते हैं।
  • लचीला। टेम्पलेट किसी भी स्तर पर घोंसला जा सकता है।
  • एमवीसी सिद्धांतों के अनुरूप। यूआई और व्यापार तर्क के अलगाव को बढ़ावा देता है। सभी डेटा समय से पहले बनाया गया है, और टेम्पलेट को पास कर दिया गया है।

पेशेवरों:

  • स्ट्रिंग टेम्पलेट जावा डेवलपर्स से परिचित

विपक्ष:

  • सरल टेम्पलेट वाक्यविन्यास इच्छित आउटपुट में हस्तक्षेप कर सकता है (जैसे jQuery संघर्ष )

विंग बीट्स

एक्सएचटीएमएल बनाने के लिए विंग बीट्स एक आंतरिक डीएसएल है। यह एफ # पर आधारित है और इसमें एएसपी.नेट एमवीसी व्यू इंजन भी शामिल है, लेकिन एक्सएचटीएमएल बनाने की इसकी क्षमता के लिए पूरी तरह से इस्तेमाल किया जा सकता है।

पेशेवरों:

  • वैध एक्सएमएल की संकलन-समय की जांच
  • सिंटेक्स रंग
  • पूर्ण इंटेलिजेंस
  • संकलित विचार
  • नियमित सीएलआर कक्षाओं, कार्यों, आदि का उपयोग कर विस्तारशीलता
  • निर्बाध composability और हेरफेर क्योंकि यह नियमित एफ # कोड है
  • यूनिट टेस्टेबल

विपक्ष:

  • आप वास्तव में HTML नहीं लिखते हैं लेकिन कोड जो एक डीएसएल में एचटीएमएल का प्रतिनिधित्व करता है।

XsltViewEngine (MvcContrib)

डिजाइन लक्ष्य:

परिचित एक्सएसएलटी से विचार बनाता है

पेशेवरों:

  • व्यापक सर्वव्यापी
  • एक्सएमएल डेवलपर्स के लिए परिचित टेम्पलेट भाषा
  • XML- आधारित
  • समय परीक्षण किया
  • सिंटेक्स और तत्व घोंसले की त्रुटियों को सांख्यिकीय रूप से पहचाना जा सकता है।

विपक्ष:

  • कार्यात्मक भाषा शैली प्रवाह नियंत्रण मुश्किल बनाता है
  • एक्सएसएलटी 2.0 (शायद?) समर्थित नहीं है। (एक्सएसएलटी 1.0 बहुत कम व्यावहारिक है)।

मैं एएसपी.नेट एमवीसी के लिए उपलब्ध विभिन्न व्यू इंजनों के टूटने के लिए एसओ और Google पर खोज कर रहा हूं, लेकिन दृश्य इंजन के बारे में सरल उच्च स्तरीय विवरणों से कहीं ज्यादा नहीं मिला है।

मैं जरूरी नहीं कि "सर्वोत्तम" या "सबसे तेज़" की तलाश कर रहा हूं बल्कि विभिन्न परिस्थितियों के लिए प्रमुख खिलाड़ियों के फायदे / नुकसान (जैसे डिफ़ॉल्ट वेबफॉर्म व्यूइंजिन, एमवीसी कोंट्रिब व्यू इंजन इत्यादि) के कुछ असली दुनिया की तुलना की आवश्यकता नहीं है। मुझे लगता है कि यह निर्धारित करने में वास्तव में सहायक होगा कि डिफ़ॉल्ट इंजन से स्विचिंग किसी दिए गए प्रोजेक्ट या डेवलपमेंट ग्रुप के लिए फायदेमंद होगा।

क्या किसी को ऐसी तुलना का सामना करना पड़ा है?


इस SharpDOM जांच करें। एचटीएमएल और एएसपीएनटी एमवीसी व्यू इंजन उत्पन्न करने के लिए यह एसी # 4.0 आंतरिक डीएसएल है।


मुझे पता है कि यह वास्तव में आपके प्रश्न का उत्तर नहीं देता है, लेकिन विभिन्न व्यू इंजनों के अलग-अलग उद्देश्य हैं। स्पार्क व्यू इंजन , उदाहरण के लिए, सब कुछ धाराप्रवाह और पठनीय बनाने की कोशिश करके "टैग सूप" के अपने विचारों से छुटकारा पाना है।

आपकी सबसे अच्छी शर्त केवल कुछ कार्यान्वयन को देखना होगा। यदि यह आपके समाधान के इरादे से अपील करता है, तो इसे आज़माएं। आप एमवीसी में व्यू इंजनों को मिलाकर मैच कर सकते हैं, इसलिए यदि आप एक विशिष्ट इंजन के साथ नहीं जाने का फैसला करते हैं तो यह कोई मुद्दा नहीं होना चाहिए।


मुझे लगता है कि इस सूची में प्रत्येक व्यू इंजन के नमूने भी शामिल होना चाहिए ताकि उपयोगकर्ता प्रत्येक वेबसाइट पर जाने के बिना प्रत्येक का स्वाद प्राप्त कर सकें।

चित्रों का कहना है कि हजारों शब्द और मार्कअप नमूने दृश्य इंजन के लिए स्क्रीनशॉट की तरह हैं :) तो यहां मेरे पसंदीदा स्पार्क व्यू इंजन से एक है

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




razor