Почему повторители в ASP.NET? - PullRequest
14 голосов
/ 08 июля 2009

Я парень по Ruby on Rails / PHP, и моя компания заставила меня работать с ASP.NET. Это не так уж и плохо, я рад изучать новый язык, но с тех пор, как я начал работать с этой технологией, все беспокоятся о репитерах.

Дело в том, что я совершенно не вижу смысла: что делает использование ретранслятора лучше, чем просто показывать вещи в цикле? Я собираюсь в ад программистов за это?

В рельсах я бы сделал ...

контроллер

@types= Type.find(:all)

вид

 <%@types.each do |t| %>
  <%= t.name %> <%= link_to "view", t%>
 <%end%>

В ASP.NET я бы сделал:

атрибуты класса контроллера

protected List<Type> _types = null;

Контроллер класса PageLoad

_types = MethodThatGetTypeFromDB();

вид

<% foreach (var tin _types){%>
   <%= t.name %>
<%}%>

Повторителей нет, но код чистый, СУХОЙ и учитывает точку доступа MVC. Я не создаю методы везде для обработки ItemDataBound или чего-либо еще. Так в чем здесь идея? Разве я единственный, кто считает, что ретрансляторы - это сложная задача для установки, и они не стоят этого по сравнению с преимуществами, которые они приносят?

Я думаю, что я просто не понимаю идею здесь.

Я не пытаюсь начать боевые рельсы против мира, просто это то, что я знаю лучше всего, так что это парадигма, которую я пытаюсь найти, когда я развиваюсь. Я думаю, что это более удобно, и я к этому привык, но если кто-то скажет: «Повторители хороши, потому что А, В и С, делать то, что вы делаете, ужасно, потому что Д, Е и F», тогда я признаю это и измени мой подход.

Ответы [ 10 ]

10 голосов
/ 08 июля 2009

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

Теперь с ASP.Net MVC я возвращаюсь к тому, что вы описали выше. Но мне трудно преодолеть инстинкт разграничения кода и кода.

Редактировать: Вот статья 2003 года о дебатах о выделении кода.

4 голосов
/ 09 июля 2009

Microsoft часто пытается максимизировать то, что вы можете сделать без кодирования. Вы можете многое сделать с повторителями без какого-либо кода. С элементами управления источниками данных вы можете сделать многое без какого-либо кода. Можно предположить, что в качестве корпоративной стратегии они хотят иметь самую простую в использовании среду разработки, и «вообще никакого кода», по-видимому, является чьим-то определением простоты использования.

Но когда вы хотите выйти за рамки бесплатного автоматического поведения, вы погружаетесь в модель событий с множеством извилистых отрывков, которые выглядят одинаково. Мне нравится девиз Perl: «Делай простые вещи простыми, а сложные - возможными», и иногда Microsoft предпочитает «делать простые вещи тривиальными, а все остальное сложным».

Некоторые упоминали, что ASP.Net MVC отходит от этого. Если это правда, это лучшая новость, которую я слышал весь день.

3 голосов
/ 09 июля 2009

Asp.Net метод веб-разработки отличается от Rails тем, что традиционный ASP.Net не основан на MVC. Вы можете сделать MVC, используя традиционный ASP.Net, однако это сложно и неуклюже (как правило). Это то, что приводит к структуре ASP.Net MVC, чтобы заполнить это пространство.

Повторитель был хорошим элементом управления для традиционного ASP.net в том смысле, что он обеспечивал лучшую производительность и больше возможностей, чем другие элементы управления с привязкой к данным. В некоторых случаях это также обеспечивало лучшую разметку. Как уже говорили другие, он обеспечивает большую инфраструктуру, а также четкое разделение разметки и кода.

Нет ничего плохого в том, что вы делаете; однако, если вы используете традиционный ASP.Net, а не ASP.Net mvc, человек, который поддерживает код после вас, может быть не слишком счастлив.

3 голосов
/ 08 июля 2009

Я думаю, что основная цель ретрансляторов состоит в том, чтобы исключить процедурный код из поля зрения / разметки. Идея состоит в том, что кто-то, кто является графическим / эстетическим дизайнером, может прийти и изменить разметку, не зная, как «кодировать». Вероятно, вас больше беспокоит то, что многие люди в мире .NET знакомы с ретранслятором, что означает, что им будет проще поддерживать.

3 голосов
/ 08 июля 2009

Ну, во-первых, считается неправильным слишком часто использовать «<% code here%>» в ASP.NET, это в основном возврат к старым дням asp. Он чередует код и дисплей, что затрудняет чтение страницы.

Таким образом, если вы работаете с выделенным кодом, вам нужно создать серверные теги или теги html, назначить их динамически и т. Д., И вы получите гораздо больше кода, чем было бы, если бы вы только что использовали ретранслятор.

Повторители также упрощают использование встроенной глобализации .NET, так как большая часть их текста автоматически добавляется в файлы resx с помощью инструмента «Создать локальный ресурс» в режиме разработки VS. Это также исключает возможность неправильных состояний просмотра, вызванных созданием тегов в коде.

Редактировать (в ответ на комментарий):

Встроенная глобализация .NET использует файлы ресурсов (.resx) для хранения частей страницы (обычно текста), таких как заголовок страницы, свойства тегов и все остальное, что может быть глобализировано.

Затем вы создаете дополнительный файл resx для каждого языка, который вы поддерживаете (французским будет «pagename.aspx.fr.resx», испанским будет «pagename.aspx.es.resx» и т. Д.), И .NET определит пользовательский язык браузера во время выполнения и использование строк из файлов resx (начиная с наиболее конкретного, которое может, и понижая до значения по умолчанию), чтобы заменить свойства тегов сервера.

Например, если у вас есть тег сервера с текстом «Hello», создайте файл ресурсов (в Visual Studio есть инструмент, который автоматически сделает это за вас) и переведите его на французский, чтобы любой пользователь мог посетить ваш сайт с языком браузера на французском будет видеть «Bonjour».

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

2 голосов
/ 08 июля 2009

Причина, по которой повторители вместо петли сводятся к основным различиям в философии кодирования. Хотя наличие цикла в коде, безусловно, не отправит вас в ад программистов, он просто может отправить вас в ад ASP.NET, потому что он нарушает разделение кода HTML и данных.

1 голос
/ 09 июля 2009
  1. Код в ASPX в основном декларативный / разметка. Этот , как правило, легче поддерживать, особенно членами команды, не имеющими достаточного опыта программирования. Работа с разметкой также помогает разделить проблемы (например, MVC).

  2. Если вы используете .Net 3.5, я считаю, что повторители в значительной степени заменены на ListView .

1 голос
/ 08 июля 2009

Основное преимущество ретранслятора возникает, когда вы генерируете несколько элементов управления ASP.NET внутри указанных циклов.

Но для большинства его применений это просто другой способ делать именно то, что вы делаете.

0 голосов
/ 09 июля 2009

Если вы используете asp.net MVC и вам говорят, что вы должны использовать ретранслятор, человек, который говорит вам об этом, вероятно, является классическим человеком ASP.net.

В MVC единственными элементами управления, которые вы должны использовать, являются <asp:ContentPlaceHolder> s и пользовательские элементы управления вместо render :partial => "foo"

0 голосов
/ 08 июля 2009

Я думаю, что вы найдете в ASP.NET Web Controls то, что они предоставляют множество инфраструктуры .

Для вашего случая использования цикл for может быть вполне подходящим.

Но для более сложных проблем форматирования и практики разработки было бы полезно иметь объект (Repeater), заключающий в себе всю функциональность вашего цикла for, и предоставлять тонны дополнительных функций в виде кода позади, с поддержкой Intellisense. .

...