Логика кнопки, которую нужно отключить или нет в MVC - PullRequest
3 голосов
/ 16 апреля 2010

Вот отрывок из книги, которую я читаю о разработке приложений с использованием MVC:

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

что для вас значит смелое утверждение? как бы это выглядело?

спасибо, стержень.

Ответы [ 2 ]

1 голос
/ 16 апреля 2010

Логика, которая решает, когда включать или отключать кнопку, должна находиться в контроллере и просто вызывать метод, например, view.EnableContinueButton () , чтобы включить / отключить кнопку на странице.

Фактический код для включения / отключения кнопки на самой странице должен быть реализован в представлении, например, метод EnableContinueButton () , который вызывает что-то вроде btnContinue.Enable () .

Проще говоря, представление должно касаться деталей пользовательского интерфейса (показать / скрыть / включить / отключить элементы пользовательского интерфейса) и оставить всю обработку бизнес-логики контроллеру.Таким образом, контроллеру не нужно заботиться об элементах пользовательского интерфейса, и представление работает независимо от реальной бизнес-логики.

, например, в контроллере,

public void ProcessOrder()
{
   if (!controller.ValidateOrder(model.OrderNo))
       view.EnableContinueButton(false);
   else
       // Process the order
       ...
}

и вView

public void EnableContinueButton(bool enabled)
{
    btnContinueButton.Enabled = enabled;
}

Честно говоря, у меня нет большого опыта в MVC (реализованном в одном проекте некоторое время назад), но я надеюсь, что логическое разделение между контроллером и представлением достаточно ясно.

1 голос
/ 16 апреля 2010

Вот что значит для меня это смелое утверждение:

  • Контроллер будет полон вложенных операторов if
  • Модель (или модель представления) будет заполнена свойствами, которые помогут визуализировать страницы особым образом, что затруднит поддержку графов объектов.

Хотя я думаю, что анализ не должен выполняться в представлении, условие должно быть установлено так, чтобы кнопка только думала - показать или не показать.

например. Показывать кнопку сведений о испытуемом только в том случае, если испытуемый является мужчиной.

Вы либо создаете свойство viewmodel ShowExamineeDetails. Представление проверит, является ли это ture или нет.

ShowExamineeDetails = является испытуемым мужчиной?

код должен быть в контроллере.

Что касается тестирования, мне еще предстоит найти приложение, которое "... практически не нуждается в тестировании ..."

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