如何在没有开关的情况下重构和重新设计类结构的实现

本文关键字:设计类 实现 结构 重构 情况下 开关 | 更新日期: 2023-09-27 18:00:25

我使用的是以前编写的代码,我想进行重构。问题如下:在每个用户角色都有多个用户角色的ASP.NET MVC应用程序中,应该显示带有菜单的个人详细信息页面,其中包含一些可以应用于特定用户角色的操作,对于不同的用户角色,菜单中的操作是不同的,例如:用户以管理员身份登录并希望查看学习者(使用角色)的个人详细信息页面,学习者菜单项将显示

  1. 更改密码
  2. CV
  3. 分配资格

如果用户以其他角色登录,例如评估员(用户角色)菜单将显示其他项目

  1. 更改密码
  2. 进度
  3. 分配资格
  4. 分配单位

如果用户想查看自己的个人信息页面,菜单将与其他项目一起显示。

主要思想是,菜单项对于特定的用户角色是不同的,用户角色的数量大约为7。并且存在用户翻看其他用户的个人信息页面的不同组合。

目前代码看起来像

    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
}

}

从这个类中,您可以看到每个用户角色都有switchcase语句,我想重构它并删除switch构造。

如何以高效的方式对代码进行重构和重新设计?

请帮我提一些建议或解决方案。

提前感谢!

如何在没有开关的情况下重构和重新设计类结构的实现

查看SiteMap和角色提供程序