ASP.NET 视查发动机比较
-
12-09-2019 - |
题
我一直在寻找在因此与谷歌对一个崩溃的各种看引擎可用于ASP.NET 视,但还没有找到更多简单的高级别说明为什么一看发动机。
我不一定寻找"好的"或"快"而是一些真正的世界的比较优点/缺点的主要参与者(例如默认WebFormViewEngine,MvcContrib视的发动机,等等。) 对于各种情况。我认为这将真正有助于确定如果切换从默认机会有利于某个特定项目或发展集团。
有人遇到这样的比较?
解决方案
ASP.NET 视图的引擎(社会Wiki)
由于一个全面的清单似乎不存在,让我们开始一个在这里在如此。这可能是很有价值的ASP.NET 视社会如果人们加入他们的经验(esp。任何人都作出贡献的人给这些中的一个).什么执行 IViewEngine
(例如 VirtualPathProviderViewEngine
)是公平的游戏这里。只是按字母顺序排列的新视图发动机(而使WebFormViewEngine和剃刀在顶),并试目以待在比较。
设计目标:
图发动机是用来呈现 网页形式的响应。
赞成:
- 普遍存在的,因为它的船只ASP.NET 视
- 熟悉经验ASP.NET 开发商
- IntelliSense
- 可以选择任何语言与CodeDom提供商(例如C#VB.NET F#,嘘,Nemerle)
- 在需求汇编或 编译 的风景
缺点:
- 使用的是混淆存在的"经典ASP.NET"模式不再适用于视(例如视图状态回发)
- 可以有助于防模式"的标签汤"
- 代码块的语法和强打字可以得到的方式
- 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>
<%}%>
设计目标:
赞成:
- 紧凑,表现,以及流体
- 简单易学
- 是不是一个新的语言
- 具有很大的Intellisense
- 单元测试
- 无处不在,船只ASP.NET 视
缺点:
- 创建了一个稍微不同的问题从"标签汤"引用上。那里的服务器的标记实际上提供结构周围的服务和非服务器码,剃刀的混淆HTML和服务编码,使得纯HTML或JS发展具有挑战性的(见Con例#1)作为你最终具有"逃脱"HTML和/或JavaScript标签下的某些非常普通的条件。
- 可怜的封装+reuseability:这是不切实际调用剃刀的模板,因为如果它是一个正常的方法在实践中剃刀可以呼叫号码而不是相反,这可以鼓励混合代码,并介绍。
- 语法是非常html导向;产生非html内容可能会非常棘手。尽管如此,剃刀的数据模型,本质上只是串联,因此语法和嵌套的错误,既不是静态的,也不是动态检测,虽然VS.NET 设计时帮助缓解这些。维护和refactorability可能遭受由于此。
没有记录API, http://msdn.microsoft.com/en-us/library/system.web.razor.aspx
Con例#1(通知安置"string[]..."):
@{
<h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
foreach (var person in teamMembers)
{
<p>@person</p>
}
}
设计目标:
- 尊重HTML作为第一流的语言而不是将它视为"只有文字"。
- 不要惹我HTML!数据结合代码(维尔代码)应独立于HTML。
- 执行严格的模型图,分离
设计目标:
本抄网查看发动机已经被移植 从轨到工作的 Microsoft ASP.NET 视的框架。对于 介绍抄网,请参阅 文件上 城堡的项目 网站.
赞成:
- 模仿"的手腕友好python语法"
- 在要求编制的意见(但没有预编译可用)
缺点:
- 设计书写的语言 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使用VB.NET's XML文本,而不是串像大多数其他图的引擎。
赞成:
- 编译时间检查的有效的XML
- 语法上色
- 完全的智能感知
- 汇编的意见
- 扩展使用常规CLR类、功能等等
- 无缝的组合和操纵,因为它的规则VB.NET 代码
- 单元测试
缺点:
- 性能:建立整个DOM之前发送给客户。
例如:
Protected Overrides Function Body() As XElement
Return _
<body>
<h1>Hello, World</h1>
</body>
End Function
设计目标:
NDjango是一个实现的 Django模板的语言 上。净 平台,使用 F#语言.
赞成:
- NDjango释放0.9.1.0似乎是更稳定下的压力比
WebFormViewEngine
- Django模板编辑与法着色代码完成,并作为你型诊断(VS2010仅)
- 集成ASP.NET城堡单轨铁路和小酒馆视框架
设计目标:
.净口的轨Haml图的引擎。从 Haml网站:
Haml是一个标记语言的使用 完全和简单地描述 XHTML的任何网页的文件,而不 使用内联的代码...Haml可避免的 需要明确的编码XHTML入 该模板,因为它实际上是 一个抽象的描述XHTML, 一些代码生成的动态 内容。
赞成:
- 简洁的结构(即D.R.Y)
- 好缩进
- 清楚的结构
- C#智能感知 (为VS2008不ReSharper)
缺点:
- 一个抽象,从XHTML而不是利用熟悉的标记
- 没有智能感知VS2010
例如:
@type=IEnumerable<Product>
- if(model.Any())
%ul
- foreach (var p in model)
%li= p.Name
- else
%p No products available
NVelocityViewEngine(MvcContrib)
设计目标:
赞成:
- 易于阅读写
- 简明的代码
缺点:
- 有限数量的辅助方法可用于查看
- 并不自动具有Visual Studio一体化(智能感知、编制时间检查意见,或者重构)
例如:
#foreach ($p in $viewdata.Model)
#beforeall
<ul>
#each
<li>$p.Name</li>
#afterall
</ul>
#nodata
<p>No products available</p>
#end
设计目标:
赞成:
- 熟悉Java开发商
- XML的风格块代码
缺点:
- ...
例如:
<c:if test="${not fn:empty(Page.Tiles)}">
<p class="note">
<fmt:message key="page.tilesSupport"/>
</p>
</c:if>
设计目标:
这个想法是允许html 主流和代码,以适应 无缝。
赞成:
- 产生更多的可读的模板
- C#智能感知 (为VS2008不ReSharper)
- SparkSense插件 为VS2010(工作与ReSharper)
- 提供了一个强大的 绑定的要素 摆脱 所有 代码在你的意见,并允许你很容易地创造自己HTML tags
缺点:
- 没有明确的分离模板逻辑文本标记(这可以减轻,名字空间的前缀)
例如:
<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 Java开发商
缺点:
- 简单模板的语法可能会干扰目的输出(例如 jQuery冲突)
翼拍的是一个内部的DSL用于创建XHTML。它是根据F#并且包括一个ASP.NET 视查发动机,但也可以只用于其能力建XHTML。
赞成:
- 编译时间检查的有效的XML
- 语法上色
- 完全的智能感知
- 汇编的意见
- 扩展使用常规CLR类、功能等等
- 无缝的组合和操纵,因为它的经常F#代码
- 单元测试
缺点:
- 你不是真的写HTML,但代码表示HTML在DSL。
设计目标:
建立意见,从熟悉的XSLT
赞成:
- 广泛的无处不在
- 熟悉的模板语言为开发XML
- 基于XML
- 经过时间考验的
- 语法和元素嵌套的错误可以静态检测。
缺点:
- 功能性的语言风格,使流动的控制很困难
- XSLT2.0(可能?) 不支持。(XSLT1.0是多少实际的).
其他提示
我的当前的选择是剃刀。这是非常干净,易于阅读,并保持视图页面非常容易维护。也有智能感知支持,这实在是太棒了。 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视图引擎,所以,如果你决定不与特定的引擎去它不应该是一个问题。
检查此 SharpDOM 。这是一个产生HTML和也asp.net MVC视图引擎一个C#4.0内部DSL。
我喜欢 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>