ASP.NET MVC View Engines (Wiki сообщества)
Поскольку полный список, похоже, не существует, давайте начнем его здесь, на SO. Это может иметь большое значение для сообщества ASP.NET MVC, если люди добавят свой опыт (особенно любой, кто участвовал в одном из них) Все, что реализует IViewEngine
(например, VirtualPathProviderViewEngine
), является честной игрой здесь. Просто расположите в алфавитном порядке новые View Engine (оставив WebFormViewEngine и Razor наверху) и попытайтесь быть объективными в сравнении.
System.Web.Mvc.WebFormViewEngine
Цели проектирования:
Движок представления, используемый для визуализации
Страница веб-форм к ответу.
Плюсы:
- вездесущий, так как поставляется с ASP.NET MVC
- знакомый опыт для разработчиков ASP.NET
- IntelliSense
- может выбрать любой язык у провайдера CodeDom (например, C #, VB.NET, F #, Boo, Nemerle)
- компиляция по требованию или предварительно скомпилированные просмотры
Минусы:
- использование смущено существованием "классических шаблонов 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
Цели дизайна:
Плюсы:
- Компактный, выразительный и плавный
- Легко учиться
- не новый язык
- Имеет большой Intellisense
- Тестируемый модуль
- Вездесущий, поставляется с ASP.NET MVC
Минусы:
- Создает немного отличную проблему от "супа метки", упомянутого выше. В то время как серверные тэги фактически обеспечивают структуру вокруг серверного и несерверного кода, Razor смешивает HTML и серверный код, что усложняет разработку чистого HTML или JS (см. Пример примера 1), так как в конечном итоге вам приходится «избегать» HTML и / или JavaScript теги при определенных очень общих условиях.
- Плохая инкапсуляция + возможность повторного использования: нецелесообразно вызывать шаблон бритвы, как если бы это был обычный метод - на практике бритва может вызывать код, но не наоборот, что может стимулировать смешивание кода и представления.
- Синтаксис очень html-ориентирован; генерировать не HTML-контент может быть сложно. Несмотря на это, модель данных бритвы по сути является просто конкатенацией строк, поэтому ошибки синтаксиса и вложения не обнаруживаются статически и динамически, хотя время разработки VS.NET несколько смягчает эту проблему. Из-за этого могут пострадать ремонтопригодность и способность к рефакторингу.
- Нет документированного API , http://msdn.microsoft.com/en-us/library/system.web.razor.aspx
Con Пример № 1 (обратите внимание на размещение строки "[] ..."):
@{
<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. За
введение в Брайль, см.
документация по проекту Castle
сайт .
Плюсы:
- смоделировано по принципу "дружественного синтаксису Python"
- Скомпилированные представления по требованию (но предварительная компиляция недоступна)
Минусы:
- предназначен для написания на языке Бу
* * Пример тысяча сто сорок пять:
<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 во время компиляции
- Синтаксическая раскраска
- Полный смысл
- Скомпилированные представления
- Расширяемость с помощью обычных классов, функций и т. Д.
- Бесшовная компоновка и манипулирование, поскольку это обычный код VB.NET
- Тестируемый модуль
Минусы:
- Производительность: строит весь DOM перед отправкой клиенту.
* +1183 * Пример:
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,
с некоторым кодом для генерации динамического
содержание.
Плюсы:
- краткая структура (т.е. D.R.Y.)
- хорошо с отступом
- прозрачная структура
- C # Intellisense (для VS2008 без ReSharper)
Минусы:
- абстракция от XHTML, а не знакомство с разметкой
- Нет Intellisense для VS2010
Пример: * * 1 256
@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-проекта
Скорость .
Плюсы:
- легко читать / писать
- краткий вид кода
Минусы:
- ограниченное количество вспомогательных методов, доступных в представлении
- не имеет автоматической интеграции с 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>
Двигатель Spark View
Цели дизайна:
Идея состоит в том, чтобы позволить html
доминировать поток и код, чтобы соответствовать
бесшовно.
Плюсы:
- Создает более читаемые шаблоны
- C # Intellisense (для VS2008 без ReSharper)
- Плагин SparkSense для VS2010 (работает с ReSharper)
- Предоставляет мощную функцию Привязки , позволяющую избавиться от всего кода в ваших представлениях, и позволяет легко изобретать собственные теги HTML
Минусы:
- Нет четкого отделения логики шаблона от буквенной разметки (это можно уменьшить с помощью префиксов пространства имен)
* * 1 367 Пример: * +1368 *
<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 для обнаружения
изменения файла.
- Динамический. Шаблоны могут быть сгенерированы на лету в коде.
- Flexible. Шаблоны могут быть вложены на любой уровень.
- В соответствии с принципами MVC. Способствует разделению пользовательского интерфейса и бизнеса
Логика. Все данные созданы раньше
время и передается шаблону.
Плюсы:
- знакомо разработчикам Java 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 гораздо менее практичен).