Как сделать рефакторинг и перепроектировать реализации структуры класса без счетчика переключателей? - PullRequest
0 голосов
/ 27 июня 2011

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

  1. Изменить пароль
  2. CV
  3. Назначить квалификации

Если пользователь вошел в систему с другой ролью, например, Ассессор (роль пользователя), в меню будут отображаться другие элементы

  1. Изменить пароль
  2. Прогресс
  3. Назначение квалификаций
  4. Назначение единиц

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

Основная идея в том, что пункты меню различны для определенных пользовательских ролей, количество пользовательских ролей около 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

}

}

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

Как можно эффективно выполнить рефакторинг и редизайн кода?

Помогите мне с некоторыми предложениями или решениемПожалуйста.

Заранее спасибо!

1 Ответ

1 голос
/ 27 июня 2011

Просмотрите SiteMap и поставщика ролей

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