Рассмотрим автоматизированную систему сборки, которая сохраняет результаты в базе данных и предлагает табличное отображение результатов через динамический HTML в ответ на запросы http GET .Многие пользователи хотят видеть разные подмножества результатов, поэтому в PHP есть сценарии синтаксического анализа, каждый из которых принимает несколько необязательных параметров и значений фильтрации.Например, (я опускаю часть http, поэтому никто здесь на самом деле не щелкает URL этого примера):
display_results.php? Componentenent_name = my_comp1 & build_type = build_type1 & build_owner = fred
Даже если списоквсе возможные параметры и их допустимые значения перечислены на странице справки, когда пользователь создает URL-адрес запроса, у него может не быть такой документации под рукой.Вместо этого, зависит от запоминания действительных параметров (включая их написание) и допустимых значений.Иногда он / она ошибается.
Вопрос
С точки зрения удобства использования для конечного пользователя, а также удобства обслуживания для разработчика, какой из следующих вариантов являетсялучше всего в ответ на такие ошибки пользователя:
- Игнорировать недопустимые параметры или значения
- Игнорировать недопустимые параметры, ничего не возвращать для недопустимых значений
- Возвращать столько допустимых данных таблицы, скольковозможно плюс сообщение об ошибке (при правильном использовании)
- Возврат только сообщения об ошибке (при правильном использовании)
- Сделайте лучшую попытку автокоррекции
- Другое (объясните)
Например, если база данных содержит данные для build_type1 и fred и joe для трех компонентов с именами comp1, comp2 и comp3, а пользователь (ошибочно) пишет:
display_results.php? name = comp1, comp2 & build_type = build_type1 & build_owner = john
- Возвращает все результаты (поскольку игнорируется неверное имя параметра "name", недопустимое значение "j"ohn ")
- Не вернул бы ничего, потому что нет данных для john
- Вернул бы все результаты для build_type1 плюс сообщения" no build_owner = john "и" возможно, вы имели в виду 'component_name' "
- Возвращает только сообщения "no build_owner = john" и "возможно, вы имели в виду 'имя_компонента'"
- Возвращает результаты comp1 и comp2 для build_type1 для joe
- Other (опишите)
Я определяю удобство использования как соответствие широко используемым веб-приложениям с хорошим поведением, которые существуют - если пользователи довольны ими, они будут рады приложению, которое я тоже описываю.
Я задаю этот вопрос, потому что я являюсь ключевым пользователем таких сценариев, делаю большое количество запросов на улучшение и хочу получить некоторую поддержку для дальнейших запросов.
=== О программеИнтерфейс - свободной формы или «страница разработчика».Да, я говорю о свободной форме.В системе есть «страница разработчика», но (а) она никогда не предлагает все опции, которые, как кажется, нужны всем пользователям, и (б) я не смог протолкнуть запрос на улучшение «создать постоянную ссылку».
=== Спасибо за выбранный ответ - недостаточно места в комментарии:
Спасибо @ pygorex1!Вы дали ответ, который поставил мой вопрос в контексте известной программной конструкции - API.И привел хороший (если, возможно, преувеличенный ;-)) пример воздействия нарушения этих принципов.Наконец, что-то беспокоило меня об API этих скриптов, и когда вы упомянули «самодокументирование», вы связали это для меня.Что меня беспокоило, так это то, что когда мало документации (потому что поддерживать ее в актуальном состоянии дорого) и с частичными результатами, возвращаемыми из-за ошибки пользователя (моя!), Я не узнаю ничего о системе.«Самодокументирование», вероятно, является наиболее кратким обоснованием рекомендованного вами подхода к обработке ошибок.Проще продавать пользователям и сопровождающим!