Я работаю над проектом ASP.NET WebForms, и нам нужна возможность настроить поведение во всем приложении на основе «группы» текущего пользователя. Это относится практически ко всем аспектам приложения, включая навигацию по сайту, отображение / скрытие определенных пользовательских элементов управления на страницах и выполнение собственной бизнес-логики в некоторых случаях. Однако подавляющее большинство поведения приложений распределяется между группами, поэтому мы исключили идею создания совершенно отдельных приложений.
По сути, я ищу архитектурный подход к реализации пользовательского поведения в приложении ASP.NET WebForms. Есть ли лучший подход, чем разбрасывание операторов if / else по всей базе кода на уровне представления, бизнес-уровне и уровне постоянства?
Редактировать : Некоторые примеры:
Если пользователь в группе А, его
навигация будет состоять из всего
навигация из группы B плюс несколько
дополнительные ссылки.
Если пользователь находится в группе А, страница будет
показать пользовательские элементы управления c1, c2 и c3.
Если пользователь находится в группе B, он будет
см. только c1 и c3 на одной странице.
Если пользователь сохраняет некоторые данные в форме
и они в группе А, отправьте
уведомление по электронной почте. Если пользователь
в группе B отправьте текстовое сообщение
вместо этого.
Мы можем решить все эти конкретные проблемы, но ищем способ максимально полно инкапсулировать это поведение, чтобы оно не разбросано по базе кода.
Редактировать : Есть несколько интересных ответов, связанных с динамической загрузкой пользовательских элементов управления. Должна ли логика определять, какие элементы управления загружать или какое поведение использовать на основе группы пользователей, должна быть заключена в один (не связный) класс, например ::1010 *
GroupManager.GetNavigationControl(int groupId) // loads site nav control based on group
GroupManager.PerformNotification(int groupId) // sends text or email based on group
Или эта логика должна существовать как можно ближе к месту в коде, где она используется, и поэтому распространяться по различным уровням кодовой базы?