在AspNet Web API中使用Model或ViewModel

问题描述

在Asp.Net MVC应用程序中,通常使用MVVM与视图进行通信。随着Web API的出现,尤其是Code First的出现,MVVM是否仍然存在?

许多人说,由于我们没有视图,因此使用MVVM没什么用。

我的建议是,您应始终使用MVVM,因为您不得将应用程序的模型导出到外部,以避免由于模型反映数据库结构而被黑客入侵的可能性,因此,如果我们将其直接导出到数据库中,在Web api的外部,我们已经导出了数据库的结构,并且由于外部已知字段和表,因此增加了被黑客入侵的可能性。

这就是为什么我们必须使用MVVM而不是反映数据库结构的模型的原因。

实际上,在Web api中的视图和控制器之间的通信期间,我们应该使用MVVM还是模型?

如果我们知道数据库的结构,又该如何对其进行破解?

感谢您的答复

解决方法

在Web api中,我们使用某种称为dto的东西代替viewModel,DTO与视图模型相似,但是它没有任何关于仅用于传输数据的视图的逻辑 阅读这篇文章,您会明白的
Create Data Transfer Objects (DTOs)

,

不要依赖Security by obscurity。仅仅是因为您试图通过发送ViewModel 来确保系统的安全性而以另一种形式来掩盖数据库模型。

这是一种不良做法,已被广泛拒绝。如果有人想入侵您的网站,他/她通常可以在不了解底层数据库的情况下进行操作(例如,使用SQLMap之类的工具)。是的,如果我已经知道您有一个包含哈希密码的Users表,但是通常这样的事情都是基于约定的,那么黑客就可以很容易地猜到。

使用其他安全机制,如ORM和输入/输出清理(注意:不要仅依赖其中之一。通过多种措施的组合来实现安全性)

返回MVVM。通常,视图显示来自数据库多个表的汇总信息,因此仍然需要ViewModel,因为您无法用单个Databasemodel填充View。以一个“视图”为例,您要在其中查看所有客户,他们的订单和收货地址。如果您的数据库已规范化,则极有可能不会将其全部存储在一张表中。

但是,这都是非常有根据的且针对特定用例的。互联网上有很多关于此主题的文章,例如Is MVVM pointless?Softwareengineering SE