Дружелюбные интерфейсы
Решил поделиться переводом материала Азы Раскина. Известный юзабилити мастер, опубликовал статью на A List Apart. Понимаю, может на английском и правильнее читать, но перевод вполне достойный (имхо). И таки по-русски читать зачастую проще.
Вообще, кто занимается интерфейсами - почитайте Раскина, у него есть много правильных мыслей.
http://makskomaju.wordpress.com/2007/09/21/oy-a-kak-vernut-nazad/
Хотя этот принцип многим давно известен (сам я давно отказался от удаления из базы, а делаю лишь пометки об удалении, а бызу чищу по крону раз в месяц и те поля, дата "удаления" где >= месяцу), но новичкам это будет явно полезно.
К сожалению, не только новичкам. Куча программ сейчас закрывается через подтверждение сохранения или подтверждение выхода. Тут на примере GMail показана более глубокая проблема. Не только веба. Из Виндовых программ сейчас установленных у меня, только офис предлагает нечто подобное - восстанавливает потерянный документ. Но и он делает это через одно место - если правильно выходить из программы, то появится такое же диалоговое окно с предложением сохранить. И только при критическом прерывании работы предлагает восстановление - но и это уже не так плохо.
Я тоже пользуюсь частенькор подтверждениями, а знаешь почему? Просто undo сложнее реализовать, чем yes/no, а в рамках бюджета определёного... Если по хорошему делать, то ценник будет увеличен минимум вдвое, а на это (из-за какого-то удобства) 95% клиентов не пойдут... (из моей практики). У меня только один клиент стремится, чтобы пользователям было удобней (и ему тоже:)), а все остальные "и так сойдёт" или "ну если хочешь, делай, денег больше не получишь"... Так, что можно делать выводы... Для себя - да, для своей системы (CMS, если у кого есть конечно) - да, но для разового заказа, я бы подумал...
С другой стороны, если бы этот аспект юзабилити был бы реализован хотя бы в половине существующих приложений и веб-интерфейсов, то диалоговые окна сами собой стали бы "фи".
у меня как раз заказчик на основной работе все время говорит: "ты должен думать как тупой юзер (это он про американских пользователей, на которых всегда рассчитаны его проекты... ну или почти всегда), чтобы твой продукт стал популярен"... ну или как-то так - не дословно :)
Undo конечно рулит, но я соглашусь с shaelf (кстати это и в статье было сказано) - реализовать undo сложнее, чем просто сказать "undo лучше, чем confirmation"... жаль, что не все заказчики это понимают.
2Тень Пса На самом деле не так уж и сложно... Всё проще чем кажется, но нужно немного времени, а потом по этой стезе постоянно идти... Оооочень отдалёный пример, как это сделано у меня:
Код:
/**
* В этом классе идёт работа с добавлением/сохранением/удалением из БД
* Т.к. Сейчас фактически любой контент хранится в БД, мне этого хватает
*/
class Shaelf_Db_Row_Abstract
{
const STATUS_ACTIVE = 1;
const STATUS_BLOCKED = 2;
const STATUS_DELETE = 3;
public $__status //Все свойства класса это "столбики" в БД. Т.е. в каждой записи есть и __status
/*
Этот класс используется ещё и как объект записи, т.е. каждый экземпляр класса, это одна запись в БД.
*/
public function delete()
{
$this->__status = self::STATUS_DELETE;
$this->save()
}
//Ниже реализуется метод save()
}
* В этом классе идёт работа с добавлением/сохранением/удалением из БД
* Т.к. Сейчас фактически любой контент хранится в БД, мне этого хватает
*/
class Shaelf_Db_Row_Abstract
{
const STATUS_ACTIVE = 1;
const STATUS_BLOCKED = 2;
const STATUS_DELETE = 3;
public $__status //Все свойства класса это "столбики" в БД. Т.е. в каждой записи есть и __status
/*
Этот класс используется ещё и как объект записи, т.е. каждый экземпляр класса, это одна запись в БД.
*/
public function delete()
{
$this->__status = self::STATUS_DELETE;
$this->save()
}
//Ниже реализуется метод save()
}
Т.е. такими простейшими действиями на поверхности я реализую хоть undo, хоть корзину. Мне нужно всего лишь поменять статус. Т.к. это основа всего моего фреймворка, то "откатывать" я могу всё, что угодно. Единственное, нужно автоматизировать это "наверху", а вот этого (чего-то универсального, что вызывается одним взмахом руки) у меня пока нет...
2 shaelf, да не... я понимаю, что это не из разряда "написать ОС" (образно)... у меня undo почти всех действий реализовано, но всего в 1м проекте... в остальные, просто не требовалось...
Согласен со всем вышесказанным. Но можно и "на халяву" делать (мысль крайне субьективная), если конечно же есть такие возможности. Предлагается сделать универсальный класс (хотя, может и есть уже такой), который будет стараться хозяйничать с данным видом юзабилити. Не очень много найдется желающих делать что-то на халяву, может из нас здесь нЕкто будет против этого, - это его право. Но если остальные нЕкто начнуть имплементировать это в своих работах, то "тупые заказчики", а также и другие разработчики обратят на это внимание и среагируют в пользу юзабилити.
Вот интересная статья про реализацию Undo (с Web'ом мало связана :)):