.NET 5 MVC仅展示资产列表场景 单属性ViewModel是否必要?
两种选择的合理性分析
直接用IReadOnlyList<Asset>作为视图模型可行
如果你100%确认该页面后续永远不会新增除了资产列表之外的任何展示属性、筛选参数、统计字段等内容,那当前的写法完全没有问题:没有冗余代码,逻辑直观,维护成本更低。没必要为了强行贴合ViewModel的规范额外加一层无实际作用的包装。
同事建议的ViewModel也有实际价值,成本极低收益很高
哪怕你现在觉得不会新增属性,这个只有一行属性的ViewModel带来的好处远大于它的编码成本:
- 扩展零成本:后续如果要加分页参数、页面顶部的资产总统计、全局筛选条件、状态下拉框的枚举选项等内容,直接往
IndexViewModel里加属性即可,不需要修改现有视图里所有遍历资产的代码。如果用集合当模型,后续加属性时需要把视图里所有Model的引用都改成新的ViewModel下的属性,改动量会大很多。 - 避免潜在异常:你现有代码里用了
model.First()来取显示名,一旦资产列表为空,运行时会直接抛出序列为空的异常。如果用ViewModel包裹列表,可以写成@Html.DisplayNameFor(model => model.Assets[0].Id),DisplayNameFor只会解析表达式不会真的执行索引取值,哪怕列表为空也不会报错。 - 符合团队统一规范:如果团队其他页面都用了专属ViewModel,统一写法能降低后续接手人员的理解成本,不会出现有的页面用集合有的用专属ViewModel的混乱情况。
最终建议
如果是小项目、仅你自己维护,且确定页面不会有变动,就维持现有写法即可。
如果是多人维护的中大型项目,建议花1分钟加上这个ViewModel,几乎没有额外成本,还能规避后续扩展的潜在麻烦。
内容的提问来源于stack exchange,提问作者kesarling
相关产品推荐
相关产品推荐

