如何在没有开关的情况下重构和重新设计类结构的实现
本文关键字:设计类 实现 结构 重构 情况下 开关 | 更新日期: 2023-09-27 18:00:25
我使用的是以前编写的代码,我想进行重构。问题如下:在每个用户角色都有多个用户角色的ASP.NET MVC应用程序中,应该显示带有菜单的个人详细信息页面,其中包含一些可以应用于特定用户角色的操作,对于不同的用户角色,菜单中的操作是不同的,例如:用户以管理员身份登录并希望查看学习者(使用角色)的个人详细信息页面,学习者菜单项将显示
- 更改密码
- CV
- 分配资格
如果用户以其他角色登录,例如评估员(用户角色)菜单将显示其他项目
- 更改密码
- 进度
- 分配资格
- 分配单位
如果用户想查看自己的个人信息页面,菜单将与其他项目一起显示。
主要思想是,菜单项对于特定的用户角色是不同的,用户角色的数量大约为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和角色提供程序