Я работаю с кодом, который был написан ранее, и я хочу сделать рефакторинг.Проблема заключается в следующем: в приложении ASP.NET MVC с несколькими пользовательскими ролями для каждой пользовательской роли должна отображаться страница персональных данных с меню с некоторыми действиями, которые могут применяться для определенной пользовательской роли, для различных пользовательских ролей - действия изНапример, меню отличается: пользователь вошел в систему как администратор и хочет просмотреть страницу персональных данных для ученика (использовать роль), пункты меню ученика покажут
- Изменить пароль
- CV
- Назначить квалификации
Если пользователь вошел в систему с другой ролью, например, Ассессор (роль пользователя), в меню будут отображаться другие элементы
- Изменить пароль
- Прогресс
- Назначение квалификаций
- Назначение единиц
, и, если пользователь хочет просмотреть страницу со своими личными данными, в меню появятся другие элементы.
Основная идея в том, что пункты меню различны для определенных пользовательских ролей, количество пользовательских ролей около 7. И существуют различные комбинации, которыеh пользователь просматривает страницу с личными данными другого пользователя.
На данный момент код выглядит как
public class LearnerMenuBuilder
{
public LearnerMenuBuilder(UserRole userRole, UserRole loggedUserRole)
: base(userRole, loggedUserRole)
{
}
public UserItemMenu Build()
{
var ret = new UserItemMenu();
switch (UserTypeHelper.GetTypeNameOf(currentUserRole.GetType()))
{
case Const.LearnerRole:
ret.Items = GetLearnerMenu();
return ret;
case Const.AssessorRole:
ret.Items = GetMenuForAssessor();
return ret;
case Const.InternalVerifierRole:
case Const.QualityAdviserRole:
case Const.ManagerRole:
case Const.NonEdiQualityAdviserRole:
ret.Items = GetMenuForInternalVerifier();
return ret;
case Const.CentreAdministratorRole:
ret.Items = GetMenuForCentreAdmin();
return ret;
case Const.SystemAdministratorRole:
ret.Items = GetMenuItemsForCentreSupport();
return ret;
default:
return ret;
}
}
//private methods for add items to menu
}
}
Из этого класса вы можете сделать то, что для каждой роли пользователяесть оператор регистра переключателя, и я хочу изменить его и удалить конструкцию коммутатора.
Как можно эффективно выполнить рефакторинг и редизайн кода?
Помогите мне с некоторыми предложениями или решениемПожалуйста.
Заранее спасибо!