我使用之前编写过的代码,我想进行重构。问题是如下: 在ASP.NET MVC应用程序中,每个用户角色具有多个用户角色,应显示个人详细信息页面,其中菜单包含可应用于特定用户角色的一些操作,对于不同的用户角色,菜单中的操作不同,例如: 用户以管理员身份登录,并希望查看Learner(使用角色)的个人详细信息页面,学习者菜单项将显示
如果用户使用其他角色登录,例如Assessor(用户角色) 菜单将显示其他项目
如果用户想查看自己的个人详细信息页面,菜单将显示其他项目。
菜单项对于特定用户角色不同的主要思想是用户角色的数量约为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
}
}
从这个类中你可以为每个用户角色设置switch case语句,我想重构它并删除开关构造。
如何以有效的方式重构和重新设计代码?
请帮我提一些建议或解决方案。
提前致谢!
答案 0 :(得分:1)
查看SiteMap和角色提供程序