ASP.NET сравнение двигателя с MVC
Я искал на SO & Google для разбивки различных двигателей просмотра, доступных для ASP.NET MVC, но не нашли намного больше, чем простые высокоуровневые описания того, что такое механизм просмотра.
Я не обязательно ищу "лучший" или "самый быстрый", а скорее некоторые реальные сравнения преимуществ / недостатков основных игроков (например, по умолчанию WebFormViewEngine, Mvccontrib View Engine и т. д.) для различных ситуаций. Я думаю, что это было бы очень полезно при определении того, будет ли переключение с механизма по умолчанию выгодно для данного проекта или группы разработчиков.
кто-нибудь сталкивался с таким сравнением?
6 ответов:
ASP.NET MVC View Engines (Community Wiki)
так как исчерпывающего перечня не существует, давайте начнем Вот так. Это может иметь большое значение для ASP.NET сообщество MVC, если люди добавляют свой опыт (esp. любой, кто внес свой вклад в один из них). Что-нибудь реализующее
IViewEngine(например,VirtualPathProviderViewEngine) это честная игра здесь. Просто расставьте в алфавитном порядке новые движки просмотра (оставив WebFormViewEngine и Razor вверху) и постарайтесь быть объективными сравнения.
замок сайт.
плюсы:
- по образцу "дружественного к запястью синтаксиса 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 использует VB.NET XML-литералы вместо строк, как и большинство других механизмов представления.
плюсы:
- проверка времени компиляции допустимого 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 0.9.1.0 кажется более стабильным при стрессе, чем
WebFormViewEngine- редактор шаблонов Django с раскрашиванием синтаксиса, завершением кода и диагностикой по мере ввода (только VS2010)
- интегрировано с ASP.NET, замок монорельс и бистро MVC рамки
Дизайн Голы:
.NET порт Rails Haml view engine. От сайт Haml:
Haml-это язык разметки, который используется чисто и просто описать XHTML любого веб-документа, без использование встроенного кода... Haml избегает необходимость явного кодирования XHTML в шаблон, потому что это на самом деле абстрактное описание XHTML, с некоторым кодом для создания динамических содержание.
плюсы:
- краткая структура (т. е. D. R. Y.)
- ну отступом
- четкая структура
- 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 скорость.
плюсы:
- легко читать/писать
- просмотреть код
плюсы:
- ограниченное количество вспомогательных методов, доступных в представлении
- не имеет автоматической интеграции с 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 доминируйте над потоком и кодом, чтобы соответствовать бесшовно.
плюсы:
- создает более читаемые шаблоны
- C# Intellisense (для VS2008 без ReSharper)
- SparkSense плагин для VS2010 (работает с ReSharper)
- обеспечивает мощный привязка объекта чтобы избавиться от все код в ваших представлениях и позволяет легко изобретать свои собственные 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 для обнаружения изменение файла.
- динамические. Шаблоны могут быть созданы "на лету" в код.
- гибкий. Шаблоны могут быть вложены на любой уровень.
- в соответствии с принципами MVC. Способствует разделению пользовательского интерфейса и бизнеса Логика. Все данные создаются заранее срок и передается вниз по шаблону.
плюсы:
- знакомый для разработчиков StringTemplate Java
плюсы:
- упрощенный синтаксис шаблона может мешать предполагаемому выходу (например, конфликт jQuery)
Wing Beats-это внутренний DSL для создания XHTML. Он основан на F# и включает в себя ASP.NET MVC view engine, но также может использоваться исключительно для его возможности создания XHTML.
плюсы:
- проверка времени компиляции допустимого XML
- подсветку синтаксиса
- полный intellisense
- составлен представления
- расширяемость с использованием обычных классов CLR, функций и т. д.
- бесшовная композиция и манипуляция, так как это обычный код F#
- единица тестируемый
плюсы:
- вы на самом деле не пишете HTML, но код, который представляет HTML в DSL.
Дизайн Голы:
строит представления из знакомого XSLT
плюсы:
- широко распространненым
- знакомый язык шаблонов для XML разработчики
- XML-based
- проверенные временем
- ошибки синтаксиса и вложенности элементов могут быть обнаружены статически.
плюсы:
- функциональный стиль языка делает управление потоком сложно
- XSLT 2.0 (вероятно?) не поддерживаемый. (XSLT 1.0 гораздо менее практичен).
мой текущий выбор-бритва. Это очень чистый и легкий для чтения и держит просмотр страниц очень легко поддерживать. Существует также поддержка intellisense, которая действительно велика. 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
Я знаю, что это на самом деле не ответ на ваш вопрос, но разные механизмы просмотра имеют разные цели. Элемент Spark View Engine, например, стремится избавить ваши взгляды от "супа тегов", пытаясь сделать все свободно и читабельно.
лучше всего было бы просто посмотреть на некоторые реализации. Если это выглядит привлекательным для цели вашего решения, попробуйте его. Вы можете смешивать и сопоставлять механизмы просмотра в MVC, поэтому это не должно быть проблемой, если вы решите не идти с a специфический двигатель.
проверить это SharpDOM . Это C# 4.0 внутренний dsl для генерации html, а также asp.net MVC view engine.
Мне нравится ndjango. Он очень прост в использовании и очень гибкий. Вы можете легко расширить функциональность просмотра с помощью пользовательских тегов и фильтров. Я думаю, что "сильно привязанный к F#" - это скорее преимущество, чем недостаток.
Я думаю, что этот список должен также включать образцы каждого механизма просмотра, чтобы пользователи могли получить вкус каждого, не посещая каждый веб-сайт.
фотографии говорят тысячу слов и образцы разметки похожи на скриншоты для просмотра двигателей :) так вот один из моих любимых Spark View Engine
<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>
Comments