C++ является языком, VC ++ (Visual C++) является средой разработки Microsoft, которая была предшественником к Visual Studio, которая помогает Вам записать C++.
можно знать, что все там должно знать о C++ и никогда не видело VC ++.
Поскольку исчерпывающий список не существует, давайте начнем с SO. Это может иметь большое значение для сообщества ASP.NET MVC, если люди добавят свой опыт (особенно любой, кто внес свой вклад в один из них). Все, что реализует IViewEngine
(например, VirtualPathProviderViewEngine
), здесь является честной игрой. Просто расположите по алфавиту новые механизмы просмотра (оставив WebFormViewEngine и Razor наверху) и постарайтесь быть объективными в сравнении.
System.Web.Mvc.WebFormViewEngine
Цели разработки:
Механизм просмотра, который используется для визуализации а and Fluid
Легко учиться Это не новый язык Имеет отличный Intellisense Unit Testable Вездесущий, поставляется с ASP.NET MVC Минусы:
- Создает немного другой проблема из упомянутого выше "супа из тегов". Если серверные теги фактически обеспечивают структуру серверного и несерверного кода, Razor путает HTML и серверный код, что усложняет разработку чистого HTML или JS (см. Con Example # 1), поскольку вам приходится «избегать» HTML и / или JavaScript. теги при определенных очень общих условиях.
- Плохая инкапсуляция + возможность повторного использования: непрактично вызывать шаблон razor, как если бы это был обычный метод - на практике razor может вызывать код, но не наоборот, что может способствовать смешиванию кода и представления.
- Синтаксис очень ориентирован на HTML; создание содержимого, отличного от HTML, может быть сложной задачей. Несмотря на это, Модель данных razor - это, по сути, просто конкатенация строк, поэтому ошибки синтаксиса и вложенности не обнаруживаются ни статически, ни динамически, хотя помощь времени разработки VS.NET несколько смягчает это. Из-за этого может пострадать удобство обслуживания и рефакторинга.
Нет задокументированного API, http://msdn.microsoft.com/en-us/library/system.web.razor.aspxCon Example №1 (обратите внимание на размещение «string [] ...»):
@{ <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"}; foreach (var person in teamMembers) { <p>@person</p> } }
Цели дизайна:
- Уважайте HTML как первоклассный язык, а не относитесь к нему как к «просто тексту».
- Не связывайся с моим HTML! Код привязки данных (код Bellevue) должен быть отделен от HTML.
- Обеспечить строгое разделение модели и представления
Цели разработки:
Механизм представления Brail был перенесен поэтому синтаксические ошибки и ошибки вложенности не обнаруживаются ни статически, ни динамически, хотя помощь во время разработки VS.NET несколько смягчает это. Из-за этого может пострадать удобство обслуживания и рефакторинга.
Нет задокументированного API, http://msdn.microsoft.com/en-us/library/system.web.razor.aspxCon Example №1 (обратите внимание на размещение «string [] ...»):
@{ <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"}; foreach (var person in teamMembers) { <p>@person</p> } }
Цели дизайна:
- Уважать HTML как первоклассный язык, а не рассматривать его как «просто текст».
- Не связывайся с моим HTML! Код привязки данных (код Bellevue) должен быть отделен от HTML.
- Обеспечить строгое разделение модели и представления
Цели разработки:
Механизм представления Brail был перенесен поэтому синтаксические ошибки и ошибки вложенности не обнаруживаются ни статически, ни динамически, хотя помощь во время разработки VS.NET несколько смягчает это. Из-за этого может пострадать удобство обслуживания и рефакторинга.
Нет задокументированного API, http://msdn.microsoft.com/en-us/library/system.web.razor.aspxCon Example №1 (обратите внимание на размещение «string [] ...»):
@{ <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"}; foreach (var person in teamMembers) { <p>@person</p> } }
Цели дизайна:
- Уважайте HTML как первоклассный язык, а не относитесь к нему как к «просто тексту».
- Не связывайся с моим HTML! Код привязки данных (код Bellevue) должен быть отделен от HTML.
- Обеспечить строгое разделение модели и представления
Цели разработки:
Механизм представления Brail был перенесен Из-за этого может пострадать удобство обслуживания и рефакторинга.
Нет задокументированного API, http://msdn.microsoft.com/en-us/library/system.web.razor.aspxCon Example №1 (обратите внимание на размещение «string [] ...»):
@{ <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"}; foreach (var person in teamMembers) { <p>@person</p> } }
Цели дизайна:
- Уважайте HTML как первоклассный язык, а не относитесь к нему как к «просто тексту».
- Не связывайся с моим HTML! Код привязки данных (код Bellevue) должен быть отделен от HTML.
- Обеспечить строгое разделение модели и представления
Цели разработки:
Механизм представления Brail был перенесен Из-за этого может пострадать удобство обслуживания и рефакторинга.
Нет задокументированного API, http://msdn.microsoft.com/en-us/library/system.web.razor.aspxCon Example №1 (обратите внимание на размещение «string [] ...»):
@{ <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"}; foreach (var person in teamMembers) { <p>@person</p> } }
Цели дизайна:
- Уважать HTML как первоклассный язык, а не рассматривать его как «просто текст».
- Не связывайся с моим HTML! Код привязки данных (код Bellevue) должен быть отделен от HTML.
- Обеспечить строгое разделение модели и представления
Цели разработки:
Механизм представления Brail был перенесен
- Уважайте HTML как первоклассный язык, а не рассматривайте его как «просто текст».
- Не связывайся с моим HTML! Код привязки данных (код Bellevue) должен быть отделен от HTML.
- Обеспечить строгое разделение модели и представления
Цели разработки:
Механизм представления Brail был перенесен
- Уважайте HTML как первоклассный язык, а не рассматривайте его как «просто текст».
- Не связывайся с моим HTML! Код привязки данных (код Bellevue) должен быть отделен от HTML.
- Обеспечить строгое разделение модели и представления
Цели разработки:
Механизм представления Brail был перенесен из MonoRail для работы с Microsoft ASP.NET MVC Framework. За введение в Брайл, см. документация по проекту Замок веб-сайт .
Плюсы:
- смоделирован на основе "удобного для запястья синтаксиса Python"
- Компилированные по запросу представления (но без предварительной компиляции)
Минусы:
- разработан для написания в language 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 использует XML-литералы VB.NET вместо строк, как большинство других механизмов представления.
Плюсы:
- Проверка корректности XML во время компиляции
- Раскраска синтаксиса
- Полный интеллект
- Скомпилированные представления
- Расширяемость с использованием обычных классов, функций CLR и т. Д.
- Полная компоновка и манипулирование, поскольку это обычный код VB.NET
- Тестируемый модуль
Минусы:
- Производительность: строит всю модель DOM перед отправкой клиенту.
Пример:
Protected Overrides Function Body() As XElement Return _ <body> <h1>Hello, World</h1> </body> End Function
Цели проектирования:
NDjango - это реализация Язык шаблонов Django в .NET платформа, использующая язык F # .
Плюсы:
- Версия 0.9.1.0 NDjango кажется более стабильной при нагрузке, чем
WebFormViewEngine
- Редактор шаблонов Django с раскрашиванием синтаксиса, автозавершением кода , и диагностика по типу (только VS2010)
- Интеграция со средами ASP.NET, Castle MonoRail и Bistro MVC
Цели проектирования:
Порт .NET для механизма представления Rails Haml. Из веб-сайта 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-проекта Скорость .
Плюсы:
- легко читать / писать
- краткий код представления
Минусы:
- ограниченное количество вспомогательных методов, доступных в представлении
- не выполняется автоматически иметь интеграцию с 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 в сочетании с концепцией Tiles framework (по данным Mile Stone 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. Способствует разделению UI и Business Логика. Все данные создаются до времени и передается в шаблон.
Плюсы:
- знакомы Java-разработчикам StringTemplate
Минусы:
- упрощенный синтаксис шаблона может мешать предполагаемому выводу (например, jQuery конфликт )
Wing Beats - это внутренний DSL для создания XHTML. Он основан на F # и включает в себя механизм просмотра ASP.NET MVC, но также может использоваться исключительно из-за возможности создания XHTML.
Плюсы:
- Проверка корректности XML во время компиляции
- Раскраска синтаксиса
- Полный интеллект
- Скомпилированные представления
- Расширяемость с использованием обычных классов CLR, функций и т. Д.
- Полная возможность компоновки и манипулирования это обычный код F #
- Подходит для модульного тестирования
Минусы:
- На самом деле вы пишете не HTML, а код, представляющий HTML в DSL.
Цели разработки:
Создает представления на основе знакомого XSLT
Плюсы:
- широко распространенный
- знакомый язык шаблонов для разработчиков XML
- Основанный на XML
- проверенный временем
- Синтаксис и ошибки вложения элементов могут быть статическими обнаружен.
Минусы:
- стиль функционального языка затрудняет управление потоком данных
- XSLT 2.0 (вероятно?) не поддерживается. (XSLT 1.0 гораздо менее практичен.)
Я знаю, что это не совсем ответ на ваш вопрос, но разные механизмы просмотра имеют разные цели. Spark View Engine , например, направлен на то, чтобы избавить ваши представления от «супа тегов», пытаясь сделать все плавным и читабельным.
Лучше всего просто взглянуть на некоторые реализации. Если это кажется привлекательным для вашего решения, попробуйте его. Вы можете смешивать и сопоставлять механизмы просмотра в MVC, поэтому это не должно быть проблемой, если вы решите не использовать конкретный механизм.
Я думаю, что этот список должен также включать образцы каждого механизма просмотра, чтобы пользователи могли получить представление о каждом из них, не посещая каждый веб-сайт.
Картинки содержат тысячу слов, а образцы разметки похожи на снимки экрана для движков просмотра :) Итак, вот один из моего любимого 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>
Для этого используется JCLDebug из JCL .
Ниже будет получен стек вызовов для текущего местоположения и возвращен в виде последовательности.
function GetCurrentStack: string;
var
stackList: TJclStackInfoList; //JclDebug.pas
sl: TStringList;
begin
stackList := JclCreateStackList(False, 0, Caller(0, False));
sl := TStringList.Create;
stackList.AddToStrings(sl, True, True, True, True);
Result := sl.Text;
sl.Free;
stacklist.Free;
end;
Чтобы сделать эту работу ожидаемой, необходимо включить один из поддерживаемых способов для отладочной информации для JCL, например:
Недавно я переключился между файлами JDBG, вставленными в EXE, чтобы просто доставить внешние файлы JDBG, поскольку их было проще обслуживать.
Существуют также процедуры, полезные для трассировки, такие как:
функция ProcStartLevel (Level: Integer): Последовательность;
Это позволяет определить текущее имя метода/процедуры, просматривая в стеке вызовов «N» количество уровней.
-121--2750462-JAD действительно удивительный декомпилятор, JD... имеют некоторые проблемы с инструкциями «try-catch-finally».
Пробовали ли вы декомпилятор Стивера ( http://www.reversed-java.com/fernflower )?
Эммануэля, автора JD.
-121--3560050-Мне нравится ndjango . Он очень прост в использовании и очень гибок. Функции просмотра можно легко расширить с помощью пользовательских тэгов и фильтров. Думаю, что «сильно привязан к F #» скорее преимущество, чем недостаток.
Проверьте это SharpDOM . Это внутренний dsl c# 4.0 для создания html, а также asp.net обработчика представлений mvc.