Как я могу реализовать удобную для пользователя булеву логику в GUI веб-формы?

Я использовал бы Строку. Формат, но у меня также была бы строка формата в файлах ресурсов, таким образом, это может быть локализовано для других языков. Используя простую строку concat не позволяет Вам делать это. Очевидно, если Вы, привычка когда-либо должна локализовать ту строку, это не причина думать о. Это действительно зависит от того, для чего строка.

, Если бы это будет, показал пользователю, я использовал бы Строку. Формат, таким образом, я могу локализовать, если мне нужно к - и FxCop, проверит правописание его для меня на всякий случай:)

, Если бы это содержит числа или какие-либо другие нестроковые вещи (например, даты), я использовал бы Строку. Формат, потому что это дает мне больше управление форматированием .

, Если бы это для создания запроса как SQL, я использовал бы Linq.

, Если бы для конкатенации строк в цикле, я использовал бы StringBuilder для предотвращения проблем производительности.

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

33
задан Miguel 9 November 2009 в 21:08
поделиться

5 ответов

Когда вам нужно обработать ((A или B) и C) или (D или E или F) , вы » повторная работа с древовидной структурой данных. По моему опыту, нет простого способа представить деревья решений для пользователей "красивым" или "интуитивно понятным" способом. Это вдвойне сложно в веб-формах ASP.NET.

Однако один проверенный и верный подход заключается в следующем: одно текстовое поле принимает предложение where . Поверьте мне, подход с одним вводом действительно является наиболее простым и интуитивно понятным пользовательским интерфейсом, и он также имеет преимущество *, позволяющее быстро вводить / изменять фильтры запросов.

** Еще одно преимущество с технической стороны - это то, что возможность написать свой собственный лексер / парсер и AST. Как часто у вас получается делать это в простом приложении crud :) *

You '

7
ответ дан 27 November 2019 в 18:25
поделиться

Это сложно представить даже в приложении WinForms.

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

] Лучшая реализация этого, что я видел, была от фильтрации сервера GameSpy - я просто пытался найти снимок экрана, но ничего не нашел (эта программа все еще существует?). Насколько я помню, они сделали что-то вроде этого:

(
    Condition 1
) OPERATOR
(
    Condition 2
) OPERATOR
(
    (
        Condition 3
    ) OPERATOR
    (
        Condition 4
    )
)
1
ответ дан 27 November 2019 в 18:25
поделиться

Когда я вижу подобную проблему, я не могу не думать о ее реализации в виде стека, подобно тому, как RPN решает эту проблему.

Проблема в том, что она не кажется слишком интуитивным

Пример пользовательского интерфейса: ([Кнопка] {список}

Значение: <> [Push] [And] [Or]

Stack {

} (Калькуляторы HP RPN помещают стек над областью редактирования)

Итак, если бы я хотел написать выражение ((A и B) или (C и D)), я бы сделал следующее: A [push] (стек будет содержать "A") B [push] (стек будет содержать "B", "A") [и] (стек будет содержать "(A и B)") C [push] (стек будет содержать «C», «(A и B)») D [push] (стек будет содержать «D», «C», «(A и B)») [и] (стек будет содержать «(C и D)», «(A и B)») [или] (стек будет содержать «((A и B) или (C и D)»)

, если вы хотите добавить другие операторы, а их не слишком много, вы можете просто добавить дополнительные кнопки или сделать отдельное текстовое поле для оператора

Значение: <> [От себя] Оператор <> [Объединить]

Если вы хотите поддерживать унарные операторы, вам нужно отслеживать, является ли это префиксным или постфиксным оператором, или просто принимать префикс (логический унарный оператор «not» обычно является префиксом). Тернарные операторы обычно имеют два инфиксных указателя, поэтому их сложнее поддерживать. Некоторые бинарные (и n-арные) операторы имеют префиксный, инфиксный и суффиксный компонент «CallMethod (A, B)», так что на самом деле все сводится к тому, насколько сложным вы хотите его сделать.

Только одна идея.

1
ответ дан 27 November 2019 в 18:25
поделиться

Другой вариант - что-то вроде интерфейса построителя запросов SQL Server Management Studio - несколько строк и столбцов, где строки представляют собой AND, и столбцы ИЛИ (или наоборот, я не помню).

Вы можете выполнять обновление результирующего запроса в реальном времени, чтобы помочь пользователям (точно так же, как SQL Server обновляет полученный SQL).

0
ответ дан 27 November 2019 в 18:25
поделиться

Mac OS X offers very nice GUI widgets for doing exactly this type of thing. You can model your GUI after this type of layout/interaction.

1
ответ дан 27 November 2019 в 18:25
поделиться
Другие вопросы по тегам:

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