Волшебная кнопка - Magic pushbutton

В волшебная кнопка общий антипаттерн в графический пользовательский интерфейс.[1][2]

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

Недостатки

Для пользователей

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

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

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

Для реализации

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

Альтернативы

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

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

В этом сценарии программист рисует пользовательский интерфейс сначала, а затем пишет бизнес-логика в автоматически созданном методы.

Пример

Ниже приведен типичный пример волшебной кнопки в Borland Delphi:

процедура TForm1.Button1Click(Отправитель: TObject);вар  рег: TRegistry;начинать  рег := TRegistry.Создавать;  пытаться    рег.RootKey := HKey_Current_User;    если рег.OpenKey(' Программное обеспечение  Моя компания', истинный) тогда    начинать      рег.WriteString('Имя файла', Edit1.Текст);    конец;  наконец-то    рег.Свободный;  конец;конец;

Лучший способ сделать это - рефакторинг бизнес логика (в этом примере сохранение имени файла в реестре) в отдельный класс.

тип  TPreferences = учебный класс  частный    FFilename: Нить;    процедура SetFilename(const Ценить: Нить);  общественный    свойство Имя файла: Нить читать FFilename записывать SetFilename;    процедура Нагрузка;    процедура Сохранять;  конец;

и вызовите этот метод класса Save из обработчика Click:

процедура TForm1.Button1Click(Отправитель: TObject);начинать  Предпочтения.Сохранять;конец;процедура TForm1.Edit1Change(Отправитель: TObject);начинать  Предпочтения.Имя файла := Edit1.Текст;конец;

Рекомендации

  1. ^ "AntiPattern (Индранил Нанди, ИИТ Харагпур)".
  2. ^ Андерс Токсбоу (5 февраля 2009 г.). "Антипаттерны пользовательского интерфейса". Шаблоны пользовательского интерфейса.