【发布时间】:2013-04-18 12:10:39
【问题描述】:
据我了解,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 一样位于应用程序的外围)时,该数据库不也包含重复的验证逻辑吗?不可为空的字段等。
【讨论】:
恭喜!你对 MVC 的理解是完全错误的。它与 n 层架构无关(您似乎对此感到困惑)。
MVC 的核心思想是separation of concerns。这是通过将应用程序分为两个主要层来使用的:
然后将演示进一步拆分为控制器(用于处理用户输入)和视图(用于处理响应)。
当应用于 Web 应用程序时,您要么仅在服务器端使用 MVC(或类似 MVC)的结构,要么对于更大和更复杂的应用程序,前端和后端都有单独的 MVC 三元组。
此外,在使用应用程序时,MVC 的用户不是人类,而是浏览器。
在后一种情况下,后端就像前端应用程序的一个数据源。 MVC 的整个前端部分都是用 javascript 编写的。
P.S.如果你能看懂PHP代码,可以在this answer找到一个相当简单的模型层解释。是的。它是“简单版本”,因为 MVC 是一种用于在大型应用程序中强制执行结构的模式,而不是用于制作留言簿。
【讨论】:
您可以访问http://www.asp.net/mvc 站点并参考教程/示例以了解使用 Microsoft 技术的 MVC。
【讨论】: