ASP.NET сравнение механизма представления MVC

C++ является языком, VC ++ (Visual C++) является средой разработки Microsoft, которая была предшественником к Visual Studio, которая помогает Вам записать C++.

можно знать, что все там должно знать о C++ и никогда не видело VC ++.

337
задан casperOne 8 May 2013 в 11:16
поделиться

5 ответов

Механизмы просмотра ASP.NET MVC (Вики Сообщества)

Поскольку исчерпывающий список не существует, давайте начнем с 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.aspx

    Con Example №1 (обратите внимание на размещение «string [] ...»):

    @{
        <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
        foreach (var person in teamMembers)
        {
            <p>@person</p>
        }
    }
    

    Bellevue

    Цели дизайна:

    • Уважайте HTML как первоклассный язык, а не относитесь к нему как к «просто тексту».
    • Не связывайся с моим HTML! Код привязки данных (код Bellevue) должен быть отделен от HTML.
    • Обеспечить строгое разделение модели и представления

    Brail

    Цели разработки:

    Механизм представления Brail был перенесен поэтому синтаксические ошибки и ошибки вложенности не обнаруживаются ни статически, ни динамически, хотя помощь во время разработки VS.NET несколько смягчает это. Из-за этого может пострадать удобство обслуживания и рефакторинга.

  • Нет задокументированного API , http://msdn.microsoft.com/en-us/library/system.web.razor.aspx
  • Con Example №1 (обратите внимание на размещение «string [] ...»):

    @{
        <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
        foreach (var person in teamMembers)
        {
            <p>@person</p>
        }
    }
    

    Bellevue

    Цели дизайна:

    • Уважать HTML как первоклассный язык, а не рассматривать его как «просто текст».
    • Не связывайся с моим HTML! Код привязки данных (код Bellevue) должен быть отделен от HTML.
    • Обеспечить строгое разделение модели и представления

    Brail

    Цели разработки:

    Механизм представления Brail был перенесен поэтому синтаксические ошибки и ошибки вложенности не обнаруживаются ни статически, ни динамически, хотя помощь во время разработки VS.NET несколько смягчает это. Из-за этого может пострадать удобство обслуживания и рефакторинга.

  • Нет задокументированного API , http://msdn.microsoft.com/en-us/library/system.web.razor.aspx
  • Con Example №1 (обратите внимание на размещение «string [] ...»):

    @{
        <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
        foreach (var person in teamMembers)
        {
            <p>@person</p>
        }
    }
    

    Bellevue

    Цели дизайна:

    • Уважайте HTML как первоклассный язык, а не относитесь к нему как к «просто тексту».
    • Не связывайся с моим HTML! Код привязки данных (код Bellevue) должен быть отделен от HTML.
    • Обеспечить строгое разделение модели и представления

    Brail

    Цели разработки:

    Механизм представления Brail был перенесен Из-за этого может пострадать удобство обслуживания и рефакторинга.

  • Нет задокументированного API , http://msdn.microsoft.com/en-us/library/system.web.razor.aspx
  • Con Example №1 (обратите внимание на размещение «string [] ...»):

    @{
        <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
        foreach (var person in teamMembers)
        {
            <p>@person</p>
        }
    }
    

    Bellevue

    Цели дизайна:

    • Уважайте HTML как первоклассный язык, а не относитесь к нему как к «просто тексту».
    • Не связывайся с моим HTML! Код привязки данных (код Bellevue) должен быть отделен от HTML.
    • Обеспечить строгое разделение модели и представления

    Brail

    Цели разработки:

    Механизм представления Brail был перенесен Из-за этого может пострадать удобство обслуживания и рефакторинга.

  • Нет задокументированного API , http://msdn.microsoft.com/en-us/library/system.web.razor.aspx
  • Con Example №1 (обратите внимание на размещение «string [] ...»):

    @{
        <h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
        foreach (var person in teamMembers)
        {
            <p>@person</p>
        }
    }
    

    Bellevue

    Цели дизайна:

    • Уважать HTML как первоклассный язык, а не рассматривать его как «просто текст».
    • Не связывайся с моим HTML! Код привязки данных (код Bellevue) должен быть отделен от HTML.
    • Обеспечить строгое разделение модели и представления

    Brail

    Цели разработки:

    Механизм представления Brail был перенесен

    • Уважайте HTML как первоклассный язык, а не рассматривайте его как «просто текст».
    • Не связывайся с моим HTML! Код привязки данных (код Bellevue) должен быть отделен от HTML.
    • Обеспечить строгое разделение модели и представления

    Brail

    Цели разработки:

    Механизм представления Brail был перенесен

    • Уважайте HTML как первоклассный язык, а не рассматривайте его как «просто текст».
    • Не связывайся с моим HTML! Код привязки данных (код Bellevue) должен быть отделен от HTML.
    • Обеспечить строгое разделение модели и представления

    Brail

    Цели разработки:

    Механизм представления 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

    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

    Цели проектирования:

    NDjango - это реализация Язык шаблонов Django в .NET платформа, использующая язык F # .

    Плюсы:


    NHaml

    Цели проектирования:

    Порт .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

    Цели разработки:

    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>
    

    Spark View Engine

    Цели разработки:

    Идея состоит в том, чтобы разрешить 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

    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 гораздо менее практичен.)

    428
    ответ дан 23 November 2019 в 00:39
    поделиться

    Я знаю, что это не совсем ответ на ваш вопрос, но разные механизмы просмотра имеют разные цели. Spark View Engine , например, направлен на то, чтобы избавить ваши представления от «супа тегов», пытаясь сделать все плавным и читабельным.

    Лучше всего просто взглянуть на некоторые реализации. Если это кажется привлекательным для вашего решения, попробуйте его. Вы можете смешивать и сопоставлять механизмы просмотра в MVC, поэтому это не должно быть проблемой, если вы решите не использовать конкретный механизм.

    10
    ответ дан 23 November 2019 в 00:39
    поделиться

    Я думаю, что этот список должен также включать образцы каждого механизма просмотра, чтобы пользователи могли получить представление о каждом из них, не посещая каждый веб-сайт.

    Картинки содержат тысячу слов, а образцы разметки похожи на снимки экрана для движков просмотра :) Итак, вот один из моего любимого 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>
    
    4
    ответ дан 23 November 2019 в 00:39
    поделиться

    Для этого используется 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, например:

    • Turbo Debugger Information
    • Файлы JDBG (созданные из файлов MAP)
    • Файлы JBDG, вставленные в EXE.

    Недавно я переключился между файлами 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 #» скорее преимущество, чем недостаток.

    5
    ответ дан 23 November 2019 в 00:39
    поделиться

    Проверьте это SharpDOM . Это внутренний dsl c# 4.0 для создания html, а также asp.net обработчика представлений mvc.

    8
    ответ дан 23 November 2019 в 00:39
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: