Волшебная кнопка


Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Недостатки

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

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

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

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

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

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

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

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

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

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

Пример

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

процедура  TForm1 . Button1Click ( Отправитель :  TObject ) ; var  reg :  TRegistry ; begin  reg  : =  TRegistry . Создать ;  попробуйте  рег . RootKey  : =  HKey_Current_User ;  если  рег . OpenKey ( '\ Software \ MyCompany' ,  true ),  затем  начните  reg . WriteString ( 'Имя файла' ,  Edit1 . Text) ;  конец ;  наконец  рег . Бесплатно ;  конец ; конец ;

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

тип  TPreferences  =  частный класс  FFilename : String ; Процедура SetFilename ( Const Значение : Строка ) ; общедоступное свойство Filename : String read FFilename write SetFilename ; процедура Load ; процедура Сохранить ; конец ;                   

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

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

использованная литература

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