Отменить историю - зачем это ограничивать? [закрыто]

Почему большинство приложений имеют довольно ограниченную функциональность «отменить»?

Меня неоднократно ловили (предоставляли технически мою ошибку), где мне нужно было отменить ряд изменений (будь то в фотошопе или что-то еще), чтобы попасть на кнопку greyed out undo - no возможна дальнейшая история. Я не знаю о вас, но потенциально теряю много работы из-за этого ограничения, приводит к ужасному опыту пользователя.

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

69 голосов | спросил Anonymous 12 +04002011-10-12T13:48:29+04:00312011bEurope/MoscowWed, 12 Oct 2011 13:48:29 +0400 2011, 13:48:29

10 ответов


104

Поверьте мне, когда я это скажу - undo /redo - одна из самых больших головных задач по внедрению, тестированию и обслуживанию в любом приложении с большим размером.

Конечно, замечательно, что можно отменить /переделать что-то, поскольку оно расслабляет пользователя и позволяет им протестировать и исследовать окружающую среду, не беспокоясь. Тем не менее, полезность истории отмены начинает уменьшаться сразу после первой отмены. Медленно, ум - но верно.

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

Если эта структура не будет введена сначала, это серьезная проблема, чтобы закрепить ее впоследствии, и ее легко увязнуть в ней.

Проблемы лежат:

  • Быстро нарастающая сложность тестирования отменить /повторить с помощью любого возможного действия в любой возможной последовательности изменений любого .
  • >
  • Обеспечение того, чтобы состояние системы после отмены каждого шага было таким же, как оно было до того, как оно было изначально сделано; готовый к следующему отмене или следующий повтор
  • Правильное рассмотрение того, что является отмененным действием

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

Теперь одно популярное использование длинной истории отменить /повторить - это вернуться назад и посмотреть на что-то, как это было, а затем снова пойти вперед.

Я бы предположил, что раздражение невозможности отменить больше, чем сказать 10 шагов, не так уж неприятно, как отмена 50 шагов, а затем случайное нажатие кнопки клавиатуры, которая отбрасывает историю повтора, так что вы не можете переделать все что вы только что сделали. Я очень нервничаю, когда я что-то отменил на протяжении многих шагов, и, как правило, сначала спасаю себя, как спад, и, возможно, в этом заключается урок: экономьте часто и сохраняйте версии.

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

ответил Roger Attrill 12 +04002011-10-12T14:20:36+04:00312011bEurope/MoscowWed, 12 Oct 2011 14:20:36 +0400 2011, 14:20:36
11

Для этой проблемы есть как технические, так и бизнес-драйверы.

Технически, undo /redo очень сложно реализовать для применения любой разумной сложности. Мало того, что он должен обрабатывать сложность приложения, но он требует отслеживания состояния с течением времени и возможности сброса этого состояния. В некоторых прикладных пространствах, в частности графическом редактировании, истинное отмена не является технически выполнимой, вы можете сделать снимок только после каждого действия и вернуться к предыдущему снимку. Если вы вставляете письмо в блокнот, отмена может относительно легко удалить эту букву. Если я применяю какое-либо математическое преобразование на графическом изображении, я не могу воспроизвести обратный математический процесс и получить исходное изображение. Сохранение неограниченного количества снимков как данных, так и состояния станет ограниченным ресурсом.

С точки зрения бизнеса, если я могу применить 100 человеко-дней (в качестве примера) для реализации неограниченного отмены, или я могу применить 100 человеко-дней для доставки 3 новых запрашиваемых пользовательских функций, я могу получить лучшую отдачу за свои 100 дней путем внедрения трех новых функций. Это может быть близоруким, но мы, безусловно, видели близорукие бизнес-решения раньше.

ответил cdkMoose 12 +04002011-10-12T21:54:08+04:00312011bEurope/MoscowWed, 12 Oct 2011 21:54:08 +0400 2011, 21:54:08
8

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

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

ответил John MacIntyre 15 +04002011-10-15T06:12:14+04:00312011bEurope/MoscowSat, 15 Oct 2011 06:12:14 +0400 2011, 06:12:14
7

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

ответил martin 12 +04002011-10-12T16:50:29+04:00312011bEurope/MoscowWed, 12 Oct 2011 16:50:29 +0400 2011, 16:50:29
4

Поскольку ваша оперативная память ограничена: -)

PS - Я знаю, что сегодня у вас 8 ГБ оперативной памяти, но все же, если вы используете приложения, такие как Adobe Photoshop или, возможно, 3D-программное обеспечение, которые сохраняют много информации, если у вас есть значительное количество изменений, то это может быть огромный ресурс боров.

ответил Atif Mohammed Ameenuddin 12 +04002011-10-12T15:28:47+04:00312011bEurope/MoscowWed, 12 Oct 2011 15:28:47 +0400 2011, 15:28:47
2

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

Мне так не хватало недостатка в правильном отмене редактирования текста, что я написал собственный блокнот, который фактически сохраняет весь журнал изменений вместе с основным текстовым файлом. Таким образом, мой undo /redo сохраняется в разных экземплярах приложения. Чтобы избежать всего «отменить 50 шагов, а затем случайно потерять историю повторений с новым действием», журнал отмены является строго накопительным - если вы начинаете с foo, затем отмените его и замените его на бар, он сохранит три версии - foo, blank , и bar, поэтому вы никогда не теряете версию.

ответил Barry Kelly 15 +04002011-10-15T06:00:04+04:00312011bEurope/MoscowSat, 15 Oct 2011 06:00:04 +0400 2011, 06:00:04
1

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

ответил Assaf Lavie 13 +04002011-10-13T00:02:53+04:00312011bEurope/MoscowThu, 13 Oct 2011 00:02:53 +0400 2011, 00:02:53
1

Не существует причины UX для ограничения отмены. Недостатки причины ограничены из-за ограничений аппаратного и программного обеспечения (которые были выше в прошлом, чем сегодня).

ответил DA01 13 J000000Monday15 2015, 21:20:54
0

В терминах удобства использования нет, вы не должны быть ограничены, но, как было хорошо указано, это непросто. По моему опыту Notepad ++ имеет отличную функцию отмены. Я подозреваю его часть Scintilla , на которой основан Notepad ++. Его все с открытым исходным кодом, чтобы вы могли понять, как они его реализуют.

ответил icc97 12 +04002011-10-12T23:52:16+04:00312011bEurope/MoscowWed, 12 Oct 2011 23:52:16 +0400 2011, 23:52:16
0

MS Word, OneNote и Outlook 2010 имеют при определенных условиях более ограниченную историю отмена, чем большинство людей понимают.

Попробуйте следующее: запустите новый документ Word и введите строку или два текста, затем нажмите и удерживайте клавишу Backspace , чтобы удалить последние несколько слов. Теперь нажмите Отменить или Ctrl-Z ..., чтобы вернуть этот обратный текст, вы обнаружите, что теперь вы потеряли не только это, но и большую часть текста, который вы набрал!

Урок здесь заключается в том, что Undo является жестким, и у вас должна быть стратегия тестирования звука. Даже большие парни могут получить это ужасно неправильно.

ответил pgfearo 13 +04002011-10-13T00:17:20+04:00312011bEurope/MoscowThu, 13 Oct 2011 00:17:20 +0400 2011, 00:17:20

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132