我有两个屏幕,一个标准用户屏幕和一个管理屏幕。两者之间的变化相当小 - 管理界面上的一些额外按钮和选项。
就MVC最佳实践而言,最好是:
对管理员和标准用户屏幕使用相同的视图和相同的viewmodel 。这样就没有代码重复,但我在视图和控制器中会有几个if ... else语句
对管理员和用户屏幕使用单独的视图和视图模型。这会导致一些代码重复,但如果屏幕最终发散的程度超过目前的水平,则最终是最灵活的。
其他一些很好的解决方案吗?
答案 0 :(得分:3)
我会使用单独的viewmodels并将继承应用于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,因此具有单独的视图。您可以考虑根据需要渲染部分视图(在两个视图中)
答案 1 :(得分:0)
这真的只是一个你可以回答的问题。你基本上说过,如果更改很小,那么我们就是一个视图,并将管理函数包装在检查用户角色的if语句中。
但是,如果管理员和非管理员版本之间没有模型更改,我只会这样做。添加其他模型项后,我会建议使用单独的模型和视图。