javascript - MVC中的模型可以做计算吗

标签 javascript model-view-controller model javascriptmvc

例如,这是否适合模型:

var Model = function Model(){
this.chapterIndex = 0;
this.pageIndex = 0;
this.next = true;
this.prev = false;
this.getCurrentpage = function getCurrentPage(){
    return chapterList[this.chapterIndex].pages[this.pageIndex];
};
this.getChapterPageLength = function getChapterPageLength(){
    return chapterList[this.chapterIndex].pages.length;
};
this.getTotalChapters = function getTotalChapters(){
    return chapterList.length;
};
this.canGoForwardInChapters = function canGoForwardInChapters(){
    return this.chapterIndex + 1 < this.getTotalChapters();
};

}

或者像 cangoForwardInChapters 这样的函数应该在 Controller 中处理吗?

最佳实践是什么?

我读到https://www.sitepoint.com/mvc-design-pattern-javascript/作为引导我来到这里的引用。

最佳答案

简短回答:是的。这只是代码。

长答案:不,MVC 不是这样设计的。 MVC 专门设计用于将逻辑与 View 分离。事实上,在 .NET 中,数据层通常是一个完全独立的类库,仅由前端引用。服务器和客户端被设计为分离的,以保持后端和前端相互远离。

我知道您可能已经知道以下内容,但我想重申和澄清:MVC 代表模型、 View 、 Controller (显然),但这就是它们的作用:

模型:模型可以被认为是你的平均类(class)。它包含与特定对象相关的结构和功能,以及模型的CRUD(大多数时候实际模型和CRUD也是分开的,但又非常紧密地联系和相关)。模型是您的应用程序用来理解如何通信、计算和构造的东西。

View : View 是客户端看到的内容。它是实际的网页,实际的前端。理想情况下(尽管不切实际),它不包含任何逻辑。大多数时候,这里都有一些逻辑(主要是 JavaScript 逻辑,有时服务器逻辑也可以嵌入这里以创建动态用户体验)。这是您的 HTML、CSS 和(客户端)JavaScript 所在的位置。

Controller :这是模型和 View 之间的联络人。它接受来自客户端的请求,将其发送到模型,然后模型返回构造的模型。然后 Controller 执行任何必要的计算,并将模型传递给 View 。 Controller 本质上描述了 View 的模型 - 它解释了实体如何交互和相互关联。

这样想: 我有一个名为 ApplicationUser 的模型和一个名为 ApplicationUserCRUD 的 CRUD 类。客户端登录到我的站点( View 层),该站点向我的 Controller 发送请求。 Controller 接受他们的请求(在本例中,假设请求是他们的用户名和密码),并将其传递给 CRUD( Controller 层)。然后 CRUD 检查用户是否存在以及密码是否匹配(模型层)。然后,当确认后,它将信息发送给模型。然后模型返回到 Controller , Controller 将其传递给 View 以构造 View 。

如果您尝试在模型中执行逻辑和计算,则说明您没有正确使用 MVC。逻辑和计算在 Controller 中执行,有时在 View 中执行,有时在辅助类中执行。

Helper 类是与特定区域/ View 无关的 Controller 。

此外,CRUD 通常称为 DAL,即数据访问层。它是本质上与模型层并行的另一层,但包含与服务器/数据库交互的逻辑。我提到这一点是为了证明人们有多么不喜欢向模型添加逻辑 - 以至于他们创建一个全新的层只是为了保存逻辑。

希望这有帮助!

关于javascript - MVC中的模型可以做计算吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47838871/

相关文章:

extjs - 如何创建向 Controller 注册的模型的新实例?

javascript - div 中的 Google 新闻框

javascript - Javascript/AJAX 所需的屏幕拦截代码

javascript - Extjs MVC文件夹结构无法加载文件

opengl - Assimp三角测量不起作用

javascript - AngularJS - 将数据添加到现有模型

javascript - 如何在页面加载时在 HTML 选择选项中选择 JSON 结果

javascript - jquery 切换元素内的内容

java - 另一个类中的链表可以通过一种方法访问,但不能从另一种方法访问

c# - 为什么脚手架没有按预期工作?