问题描述
在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。