据我了解,MVC 是一种实现表示层与业务层和数据层分离的方法。我是否正确理解这一点?如果是这样,MVC 应该将业务逻辑与表示完全分离,对吗?
所以在我看来,javascript(或 jquery)似乎在某种程度上违反了 MVC 设计,因为它接管了客户端的一些逻辑,不是吗?模型 = 数据层,控制器 = 业务层,视图 = 表示层?我想我误解了整个概念。
据我了解,MVC 是一种实现表示层与业务层和数据层分离的方法。我是否正确理解这一点?如果是这样,MVC 应该将业务逻辑与表示完全分离,对吗?
所以在我看来,javascript(或 jquery)似乎在某种程度上违反了 MVC 设计,因为它接管了客户端的一些逻辑,不是吗?模型 = 数据层,控制器 = 业务层,视图 = 表示层?我想我误解了整个概念。
您似乎对 MVC 有很好的理解。问题在于您将两种不同的潜在 MVC 结构视为一个且相同的结构。在服务器上,您可以拥有数据模型、控制器和视图。在客户端,您还可以拥有数据模型、控制器和视图。如果您想将客户端 JavaScript 视为 MVC,那么 jQuery 只是一个实用程序,视图控制器可以使用它来操作视图(DOM)。
简单地说,客户端并不总是只有视图。例如,如果您使用像 Backbone 这样的 Web 应用程序客户端框架,那么您可以在客户端拥有模型、视图和控制器,它们与服务器上的另一个单独的 MVC 结构进行通信。
您所描述的确实对许多实现构成了挑战。诸如 ASP.NET MVC 框架之类的框架一直在尝试根据中间层的业务逻辑(主要是表单字段的验证规则)将 JavaScript 自动呈现到 UI。但它们距离真正引人入胜的不重复逻辑的 JavaScript 用户体验还有很长的路要走。
就个人而言,我喜欢将 JavaScript 视为纯粹的 UI 问题。应用程序在内部处理所有逻辑。作为 UI 的一部分,JavaScript 可能会复制其中的一些逻辑……但仅用于严格的 UI 目的。请记住,如果用户禁用了 JavaScript,应用程序应该优雅地退回到仍在工作的状态。也就是说,它仍然应该使用服务器端(中间层)代码来完成工作。JavaScript 所做的只是为 UI 层添加了更丰富的用户体验。
JavaScript 也不是唯一的罪魁祸首。假设您在中间层中有很多验证逻辑来定义对象的有效或无效。当您将这些对象保存到数据库(就像 UI 一样位于应用程序的外围)时,该数据库不也包含重复的验证逻辑吗?不可为空的字段等。
您可以访问http://www.asp.net/mvc站点并参考教程/示例以了解使用 Microsoft 技术的 MVC。
恭喜!你对MVC的理解是完全错误的。它与 n 层架构无关(您似乎对此感到困惑)。
MVC 的核心思想是关注点分离。这是通过将应用程序分为两个主要层来使用的:
然后演示进一步分为控制器(用于处理用户输入)和视图(用于处理响应)。
当应用于 Web 应用程序时,您要么仅在服务器端使用 MVC(或类似 MVC)结构,要么对于更大、更复杂的应用程序,前端和后端都有单独的 MVC 三元组。
此外,在使用应用程序时,MVC 的用户不是人类,而是浏览器。
在后一种情况下,后端就像前端应用程序的一个数据源。MVC 的整个前端部分都是用 javascript 编写的。
PS如果您能够阅读 PHP 代码,您可以在此答案中找到模型层的非常简单的解释。是的。它是“简单版本”,因为 MVC 是一种用于在大型应用程序中强制执行结构的模式,而不是用于制作留言簿。