Каковы хорошие подходы для обработки большого количества перестановок в пользовательском интерфейсе? - PullRequest
3 голосов
/ 24 августа 2010

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

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

На основе учетных данных пользователя у меня есть:

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

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

Я не знаю, имеет ли значение, какую платформу я использую 'я развиваюсь, так что примеры или предложения на любом конкретном языке или структуре хороши.

РЕДАКТИРОВАТЬ
Например, скажем, у меня есть ProductViewModel (в C #):

public class ProductViewModel {
   public bool DisplayPrice { get; set; }
}

На мой взгляд, тогда я могу проверить, если Model.DisplayPrice == true, и если да, отобразить цену продукта.На этом уровне меня не волнует , почему отображается.Таким образом, это заменило бы что-то вроде if ( UserInRole("Vendor") || UserInRole("Distributor") ).

Очевидно, мне нужен какой-то способ изменить этот параметр в зависимости от контекста.В идеале я бы хотел избежать условного выражения if ( UserInRole("Vendor") || UserInRole("Distributor") ), потому что список условий может быстро расти.Например, я хочу показать цену продавцам, но только если у них есть VIP-доступ, и пользователь уже более 30 дней, а также совершил предыдущие покупки, и ..

Любые лучшие практикиили предложения, для изменения / укладки настроек во время выполнения, для пользователя?Кто-нибудь с опытом реализации «предпочтений» с огромным количеством перестановок?

1 Ответ

1 голос
/ 25 августа 2010

Здесь может происходить несколько разных вещей ...

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...