ASP.NET MVC ดูเอนจิ้น (Community Wiki)
เนื่องจากรายการที่ครอบคลุมไม่มีอยู่ให้เริ่มต้นที่นี่บน SO นี่เป็นสิ่งที่มีค่าอย่างยิ่งสำหรับชุมชน ASP.NET MVC ถ้าผู้คนเพิ่มประสบการณ์ของพวกเขา (โดยเฉพาะใครก็ตามที่มีส่วนร่วมในสิ่งเหล่านี้) การดำเนินการใด ๆIViewEngine
(เช่นVirtualPathProviderViewEngine
) เป็นเกมที่ยุติธรรมที่นี่ เพียงแค่เรียงตามตัวอักษรดูเอ็นจิ้นใหม่ (ทิ้ง WebFormViewEngine และมีดโกนไว้ที่ด้านบน) แล้วลองเปรียบเทียบวัตถุประสงค์
System.Web.Mvc.WebFormViewEngine
เป้าหมายการออกแบบ:
เอ็นจินการดูที่ใช้เพื่อแสดงผลหน้าเว็บฟอร์มเพื่อตอบสนอง
ข้อดี:
- แพร่หลายเพราะมาพร้อมกับ ASP.NET MVC
- ประสบการณ์ที่คุ้นเคยสำหรับนักพัฒนา ASP.NET
- IntelliSense
- สามารถเลือกภาษาใด ๆ กับผู้ให้บริการ 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
เป้าหมายการออกแบบ:
ข้อดี:
- Compact, Expressive และ Fluid
- ง่ายต่อการเรียนรู้
- ไม่ใช่ภาษาใหม่
- มี Intellisense ที่ดี
- หน่วยทดสอบ
- แพร่หลายมาพร้อมกับ ASP.NET MVC
จุดด้อย:
- สร้างปัญหาที่แตกต่างจาก "แท็กซุป" ที่อ้างถึงข้างต้น ที่แท็กเซิร์ฟเวอร์จัดเตรียมโครงสร้างรอบ ๆ เซิร์ฟเวอร์และไม่ใช่รหัสเซิร์ฟเวอร์มีดโกนจะสร้างความสับสนให้กับ HTML และรหัสเซิร์ฟเวอร์ทำให้การพัฒนา HTML หรือ JS บริสุทธิ์ท้าทาย (ดูตัวอย่างที่ # 1) ในขณะที่คุณต้อง "หนี" HTML และ / หรือ JavaScript แท็กภายใต้เงื่อนไขทั่วไปบางอย่าง
- การห่อหุ้มไม่ดี + การนำกลับมาใช้ซ้ำ: มันไม่สามารถเรียกเทมเพลตมีดโกนราวกับว่าเป็นวิธีปกติ - ในทางปฏิบัติมีดโกนสามารถเรียกรหัสได้ แต่ไม่ใช่ในทางกลับกันซึ่งสามารถกระตุ้นการผสมของรหัสและการนำเสนอ
- ไวยากรณ์เป็นเชิง html มาก การสร้างเนื้อหาที่ไม่ใช่ HTML อาจเป็นเรื่องยุ่งยาก อย่างไรก็ตามแบบจำลองข้อมูลของมีดโกนนั้นเป็นเพียงแค่การต่อสตริงดังนั้นข้อผิดพลาดทางไวยากรณ์และการซ้อนจึงไม่ถูกตรวจพบแบบไดนามิกหรือแบบไดนามิกแม้ว่า VS.NET จะช่วยลดเวลาในการออกแบบ การบำรุงรักษาและความสามารถในการนำกลับมาใช้ใหม่สามารถประสบได้เนื่องจากสิ่งนี้
ไม่มีเอกสาร API , http://msdn.microsoft.com/en-us/library/system.web.razor.aspx
ตัวอย่างที่ # 1 (สังเกตตำแหน่งของ "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 โปรดดูเอกสารเกี่ยวกับการที่เว็บไซต์โครงการปราสาท
ข้อดี:
- ถ่ายแบบมาจาก "ข้อมือที่เป็นมิตรกับงูหลามซินแท็กซ์"
- มุมมองที่คอมไพล์ตามคำขอ (แต่ไม่มีการรวบรวมล่วงหน้า)
จุดด้อย:
- ออกแบบมาเพื่อเขียนในภาษา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 ที่ถูกต้อง
- ไวยากรณ์สี
- Intellisense เต็มรูปแบบ
- มุมมองที่รวบรวม
- ความสามารถในการขยายโดยใช้คลาส 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 พอร์ตของ Rails Haml view engine จากเว็บไซต์ Haml :
Haml เป็นภาษามาร์กอัปที่ใช้ในการทำความสะอาดและอธิบาย XHTML ของเอกสารเว็บใด ๆ โดยไม่ต้องใช้โค้ดอินไลน์ ... Haml หลีกเลี่ยงความจำเป็นในการเข้ารหัส XHTML ลงในเทมเพลตเพราะจริงๆแล้วมันเป็นคำอธิบายเชิงนามธรรมของ XHTML ด้วยรหัสบางส่วนเพื่อสร้างเนื้อหาแบบไดนามิก
ข้อดี:
- โครงสร้างสั้น (เช่น DRY)
- เว้าแหว่งดี
- โครงสร้างที่ชัดเจน
- 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 ที่เป็นที่นิยม Java โครงการ
Velocity
ข้อดี:
- ง่ายต่อการอ่าน / เขียน
- รหัสมุมมองที่กระชับ
จุดด้อย:
- วิธีใช้ตัวช่วยมี จำกัด ในมุมมอง
- ไม่มีการรวม 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
รวมกับแนวคิดที่อยู่เบื้องหลังเฟรมเวิร์ก Tiles (ตั้งแต่ Mile stone 1)
ข้อดี:
- คุ้นเคยกับนักพัฒนา Java
- บล็อคโค้ดสไตล์ XML
จุดด้อย:
ตัวอย่าง:
<c:if test="${not fn:empty(Page.Tiles)}">
<p class="note">
<fmt:message key="page.tilesSupport"/>
</p>
</c:if>
Spark View Engine
เป้าหมายการออกแบบ:
แนวคิดคือการอนุญาตให้ 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 ดู Engine MVC
เป้าหมายการออกแบบ:
- มีน้ำหนักเบา ไม่มีการสร้างคลาสหน้า
- รวดเร็ว เทมเพลตถูกเขียนไปยังสตรีมเอาต์พุตการตอบกลับ
- ที่เก็บไว้ เทมเพลตถูกแคช แต่ใช้ FileSystemWatcher เพื่อตรวจจับการเปลี่ยนแปลงไฟล์
- พลวัต แม่แบบสามารถสร้างได้ทันทีในรหัส
- คล่องตัว เทมเพลตสามารถซ้อนในระดับใดก็ได้
- สอดคล้องกับหลักการ MVC ส่งเสริมการแยก UI และตรรกะทางธุรกิจ ข้อมูลทั้งหมดถูกสร้างล่วงหน้าและส่งผ่านไปยังเทมเพลต
ข้อดี:
- คุ้นเคยกับนักพัฒนา StringTemplate Java
จุดด้อย:
- ไวยากรณ์เทมเพลตแบบง่ายสามารถรบกวนเอาต์พุตที่ต้องการ (เช่นjQuery ขัดแย้ง )
Wing Beats
Wing Beats เป็น DSL ภายในสำหรับการสร้าง XHTML มันขึ้นอยู่กับ F # และรวมถึงเอ็นจิ้นการดู ASP.NET MVC แต่ยังสามารถใช้สำหรับความสามารถในการสร้าง XHTML เท่านั้น
ข้อดี:
- การตรวจสอบเวลาแบบคอมไพล์ของ XML ที่ถูกต้อง
- ไวยากรณ์สี
- Intellisense เต็มรูปแบบ
- มุมมองที่รวบรวม
- ความสามารถในการขยายโดยใช้คลาส CLR ปกติฟังก์ชั่นและอื่น ๆ
- ความต่อเนื่องและการจัดการที่ราบรื่นเนื่องจากเป็นรหัส F # ปกติ
- หน่วยทดสอบ
จุดด้อย:
- คุณไม่ได้เขียน HTML จริงๆ แต่เป็นรหัสที่แสดงถึง HTML ใน DSL
XsltViewEngine (MvcContrib)
เป้าหมายการออกแบบ:
สร้างมุมมองจาก XSLT ที่คุ้นเคย
ข้อดี:
- แพร่หลายแพร่หลาย
- เทมเพลตภาษาที่คุ้นเคยสำหรับนักพัฒนา XML
- XML-based
- เวลาการทดสอบ
- สามารถตรวจพบข้อผิดพลาดทางไวยากรณ์และองค์ประกอบการซ้อน
จุดด้อย:
- สไตล์การใช้งานภาษาทำให้การควบคุมการไหลทำได้ยาก
- ไม่รองรับ XSLT 2.0 (อาจเป็น?) (XSLT 1.0 เป็นประโยชน์น้อยกว่ามาก)