我有两个屏幕,一个标准用户屏幕和一个管理员屏幕。两者之间的变化相当小——管理屏幕上有一些额外的按钮和选项。
就 MVC 最佳实践而言,最好:
对管理员和标准用户屏幕使用相同的视图和相同的视图模型。这样就没有代码重复,但我将在视图和控制器中有几个 if...else 语句
为管理员和用户屏幕使用单独的视图和视图模型。这会导致一些代码重复,但如果屏幕最终的分歧比现在更大,那么最终是最灵活的。
其他一些很好的解决方案?
我有两个屏幕,一个标准用户屏幕和一个管理员屏幕。两者之间的变化相当小——管理屏幕上有一些额外的按钮和选项。
就 MVC 最佳实践而言,最好:
对管理员和标准用户屏幕使用相同的视图和相同的视图模型。这样就没有代码重复,但我将在视图和控制器中有几个 if...else 语句
为管理员和用户屏幕使用单独的视图和视图模型。这会导致一些代码重复,但如果屏幕最终的分歧比现在更大,那么最终是最灵活的。
其他一些很好的解决方案?
我会使用单独的视图模型并将继承应用到您的ViewModel
. 所以您不会复制代码。
public class CustomerCreateViewModel
{
//Here i i have properties common to both user and admin
public string FirstName { set;get;}
public string LastName { set;get;}
}
public class AdminCustomerCreateViewModel : CustomerCreateViewModel
{
//This property is only for admin
public string ReasonForFiring { set;get;}
}
我个人更喜欢保留单独的视图,因为它使事情变得干净且更具可读性/可维护性。现在你有 2 个单独的 ViewModel,所以有单独的视图。您可以根据需要考虑渲染局部视图(在两个视图中)
这真的只是一个你可以回答的问题。您基本上说过,如果更改很小,那么我们使用单个视图并将管理功能包装在检查用户角色的 if 语句中。
但是,只有在管理员版本和非管理员版本之间没有模型更改时,我才会这样做。添加其他模型项后,我建议使用单独的模型和视图。