随着NoSQL的兴起,现在更常见的是拥有一个没有任何模型的webapp并处理控制器中的所有内容?这是Web开发中的一个坏模式吗?当在nosql中获取数据时,我们为什么要在模型中抽象数据库相关函数?
注意 我不是在问RDBMS / SQL是否相关,因为这只会启动flamewar。
答案 0 :(得分:4)
我不认为“NoSQL”与“无模型”有任何关系。
首先,MVC起源于桌面应用程序的Smalltalk世界,早在当前的Web服务器体系结构(甚至Web本身)存在之前。我编写的大多数应用程序都使用了MVC(包括M),甚至那些没有使用DBMS(R或其他)的应用程序。
另一方面,某些类型的“NoSQL”明确地拥有一个模型。对象数据库可能看起来像应用程序代码,几乎就像“SQL RDBMS + ORM”试图公开的接口,但没有所有奇怪的怪癖和显式映射等等。
最后,您显然可以采用其他方式,编写没有模型的基于SQL的应用程序。它可能不太漂亮,但我已经看过它了。
答案 1 :(得分:0)
SQL数据库仍然是当天的顺序。但是使用非结构化商店变得越来越普遍。 NoSQL数据库非常适合某些Web应用程序,但不一定适用于所有这些应用程序。
答案 2 :(得分:0)
NoSQL的努力与创建一个持久层有关,该层可以使用非标准化数据结构与现代应用程序进行扩展,以实现快速读取和放大。写入和数据格式,如JSON,基于ajax的系统使用的标准格式。有时,基于事务的关系数据库不能很好地扩展,但通常不良的性能与糟糕的数据建模,糟糕的查询创建和糟糕的规划直接相关。
任何持久层都不应与您的域模型有任何关系。使用数据抽象层,可以将对象中包含的数据转换为数据存储中实现的模式。然后,您将使用相同的DAL从数据存储中读取数据,转换并将其加载到对象中。
您的数据存储可以是XML文件,像SQL Server这样的RDBMS或像CouchDB这样的NoSQL实现。没关系。
FWIW,我已经构建并继承了大量根本不使用模型的应用程序。对于某些人来说,没有必要,但如果你使用的是对象模型,它必须满足应用程序的需要,而不是数据存储而不是表示层。