Ответ 1
ASP.NET MVC View Engine (Community Wiki)
Поскольку исчерпывающий список не существует, запустите его здесь на SO. Это может иметь большое значение для сообщества ASP.NET MVC, если люди добавляют свой опыт (особенно тот, кто внес вклад в один из них). Все, что реализует IViewEngine
(например, VirtualPathProviderViewEngine
), является честной игрой здесь. Просто переместите в алфавитном порядке новые View Engine (оставляя WebFormViewEngine и Razor вверху) и старайтесь быть объективными в сравнении.
System.Web.Mvc.WebFormViewEngine
Цели проектирования:
Механизм просмотра, который используется для визуализации Веб-формы для ответа.
Плюсы:
- вездесущий, поскольку он поставляется с ASP.NET MVC
- знакомый опыт для разработчиков ASP.NET
- IntelliSense
- может выбрать любой язык с провайдером CodeDom (например, С#, 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>
<%}%>
Цели проектирования:
Плюсы:
- Компактный, выразительный и жидкостный
- Простота обучения
- Не новый язык
- Отличная Intellisense
- Единичное тестирование
- Ubiquitous, поставляется с 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 (обратите внимание на размещение "string []..." ):
@{
<h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
foreach (var person in teamMembers)
{
<p>@person</p>
}
}
Цели проектирования:
- Уважать HTML как первоклассный язык, а не рассматривать его как "просто текст".
- Не связывайтесь с моим HTML! Код привязки данных (код Bellevue) должен быть отделен от HTML.
- Обеспечить строгое разделение Model-View
Цели проектирования:
Механизм просмотра Brail был портирован от MonoRail для работы с Microsoft ASP.NET MVC Framework. Для введение в Брейл, см. документация по проекту Замок сайт.
Плюсы:
- смоделированный после "синтаксиса питона на основе запястья"
- Скомпилированные представления по запросу (но не существует прекомпиляции)
Минусы:
- предназначен для написания на языке 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>
Хасик использует 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 - это реализация Язык шаблонов Django на .NET. платформу, используя язык F #.
Плюсы:
- NDjango release 0.9.1.0 кажется более стабильным при стрессе, чем
WebFormViewEngine
- Редактор шаблонов Django с раскраской синтаксиса, завершением кода и диагностикой типа (только VS2010)
- Интегрировано с ASP.NET, каркасами MonoRail и бистро MVC
Цели проектирования:
Интерфейс .NET port of Rails Haml. Из веб-сайт Haml:
Haml - это язык разметки, который использовался чисто и просто описать XHTML любого веб-документа без использование встроенного кода... Haml избегает необходимо явно кодировать XHTML в шаблон, потому что это на самом деле абстрактное описание XHTML, с некоторым кодом для генерации динамических содержание.
Плюсы:
- краткая структура (т.е. D.R.Y.)
- с отступом
- четкая структура
- С# 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 - это частичный порт 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 без ReSharper)
- плагин SparkSense для VS2010 (работает с ReSharper)
- Предоставляет мощную функцию Bindings, чтобы избавиться от всего кода в ваших представлениях и позволяет легко изобретать собственные 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 View Engine MVC
Цели проектирования:
- легкие. Классы страниц не создаются.
- Быстро. Шаблоны записываются в выходной поток ответа.
- Сохраненная копия. Шаблоны кэшируются, но используют FileSystemWatcher для обнаружения изменения файла.
- Dynamic. Шаблоны можно генерировать "на лету" в коде.
- Гибкая. Шаблоны могут быть вложены в любой уровень.
- В соответствии с принципами MVC. Способствует разделению пользовательского интерфейса и бизнеса Логика. Все данные создаются раньше времени и передается шаблону.
Плюсы:
- знакомый разработчикам Java StringTemplate
Минусы:
- упрощенный синтаксис шаблонов может помешать заданному выводу (например, конфликт jQuery)
Wing Beats - это внутренний DSL для создания XHTML. Он основан на F # и включает механизм просмотра ASP.NET MVC, но также может использоваться исключительно для его возможности создания XHTML.
Плюсы:
- Проверка времени правильного XML
- Раскраска синтаксиса
- Полная intellisense
- Скомпилированные представления
- Расширяемость с использованием обычных классов CLR, функций и т.д.
- Бесшовная композиция и манипуляция с регулярным кодом F #
- Единичное тестирование
Минусы:
- Вы действительно не пишете HTML, а код, представляющий HTML в DSL.
Цели проектирования:
Создает представления из знакомого XSLT
Плюсы:
- широко повсеместно
- знакомый язык шаблонов для разработчиков XML
- XML на основе
- проверенное время
- Синтаксис и ошибки вложенности элементов могут быть статистически обнаружены.
Минусы:
- стиль функционального языка затрудняет управление потоком.
- XSLT 2.0 (возможно?) не поддерживается. (XSLT 1.0 намного менее практичен).