Введение

Общий антипаттерн в графических пользовательских интерфейсах

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

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

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

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

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

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

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