Помощники - это наши «Пользовательские элементы управления сервером» - PullRequest
2 голосов
/ 21 февраля 2010

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

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

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

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

Ответы [ 2 ]

1 голос
/ 21 февраля 2010

Да, это правильно. Если вы все сделаете правильно, вы начнете с HTML-помощников, которые дает вам MVC, и постепенно создадите свой собственный набор помощников, которые делают все больше и больше для вашего конкретного проекта. Вы можете добраться до точки, в которой ваше представление имеет всего несколько строк кода, которые говорят что-то вроде: «Отобразить полное представление для продукта 1123». Помощники станут вашим собственным "языком" средств визуализации, характерным для вашего проекта, и вы будете применять конфигурацию, проверку и все остальное очень СУХОЙ (не повторяйте себя) манерой. Это феноменально.

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

0 голосов
/ 21 февраля 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...