2010-02-21 2 views
2

Насколько я понимаю, что методы Helper - это действительно то место, где вы можете сделать жесткую логику ядра, которую мы бы сделали, если вы скажете пользовательские элементы управления в ASP.NET? Например, я работаю на .com, который использует классический ASP.NET. Характер нашего сайта ОЧЕНЬ сложный, поэтому мы повторно используем и визуализируем различные формы для тысяч продуктов. Каждый продукт может иметь другую конфигурационную форму. У нас есть очень простой пользовательский серверный контроль RenderForm.cs, который выполняет всю логику. Основываясь на некоторых настройках конфигурации из таблицы в БД, это говорит о том, что для продукта 1123 он читает настройку (что наши пользователи путают форму нашей внутренней системы администрирования), и берет это и выплескивает динамическую форму (используя литеральные элементы управления, а какие нет) к возрасту.Помощники - это наши «пользовательские элементы управления сервером»

Итак, я сейчас думаю о MVC. Да, это все сделано в представлении. Ну, частично. У вас все еще будет необходимость иметь какую-то пользовательскую логику в некоторых .cs, где она не все встраивается в ваше представление. Было бы глупо думать, что у вас не будет какого-то класса, который выплюнет какой-нибудь HTML-код ... как некоторые очень жесткие основные обширные вспомогательные методы.

Итак, мой вопрос в том, являются ли вспомогательные методы или классы, когда вы теперь используете свой логический тип управления сервером? это в основном своего рода концепция в том, что вам нужно место, чтобы поставить свою «жесткую основу» HTML-визуализации в каком-то классе, кроме контроллера. Контроллер не отвечает за рендеринг. Поэтому вспомогательные методы, которые, как я полагаю, являются так называемыми пользовательскими элементами управления сервером таким образом, что у меня есть в классическом ASP.NET, образно говоря. Мне просто нужно «да» или «сейчас» - это консенсус в том, что вспомогательные методы - это место, где можно использовать всю мою многоядерную логику ядра, которая выплескивает html на страницу и где я могу встраивать собственные элементы управления в свое представление? Похоже на то.

«Помощники - это, по сути, статические классы, предназначенные для того, чтобы содержать логику пользовательского интерфейса, которая в противном случае загромождает ваш пользовательский интерфейс. Подумайте об этом как об утилитах пользовательского интерфейса». link text

ответ

1

Да, это правильно. Если вы все сделаете правильно, начните с HTML-помощников, которые предоставит вам MVC, и вы постепенно создадите свой собственный набор помощников, которые будут все больше и больше использоваться для вашего конкретного проекта. Вы можете дойти до того, что в вашем представлении есть всего несколько строк кода, которые говорят что-то вроде: «Просмотреть весь вид продукта 1123». Помощники станут вашим собственным «языком» рендеринга, специфичным для вашего проекта, и вы будете применять настройку, проверку и все остальное в режиме очень DRY (Don-t Repeat Yourself). Это феноменально.

Обновление: Конечно, в ваших помощниках должны идти только материалы презентации. Цель состоит в том, чтобы оставаться сухим в ваших взглядах. Вам все еще нужно быть осторожным, чтобы вставлять в ViewModels вещи, которые принадлежат ViewModels.

0

Я бы сказал «нет» ... или скорее «только там, где вам нужно». Чаще всего вы можете делать логику в контроллере (или службе) и в конечном итоге передавать все данные, необходимые для просмотра в ViewData. Иногда это будет означать несколько просмотров от одного ControllerAction, реже это будет означать логику в вашем представлении, а иногда это означает HtmlHelpers.

Когда вы решаете использовать помощников, это должно быть с учетом того, что это означает сгенерированную разметку, которая не будет ... ну, в вашей разметке. Если у вас (или позже нанимается) дизайнер, это может быть проблемой. Или, если вам нужно внести незначительные изменения в свой макет, куда вы идете первым? Ваш взгляд или ваши помощники?

[Изменить] Также следует спросить себя: где мой код легче тестировать на моду? В классе Service, который просто возвращает View Data, или в классе, который создает целые куски HTML и возвращает их как String? Если вы используете TagBuilder, как вы, вероятно, должны быть, то любое изменение в реализации TagBuilder (даже изменение обработки пробелов) нарушит тесты в Helper без изменения вашего кода.

Я не говорю «не используйте помощников», я говорю «не злоупотребляйте помощниками».

Смежные вопросы