MVC中的模型可以做计算吗

Can the model in MVC do calculations

例如,这是否适合模型:

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 这样的函数?

最佳做法是什么?

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

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

长答案:不,这不是 MVC 的设计方式。 MVC 专门设计用于将逻辑与视图分离。事实上,在 .NET 中,数据层通常是一个完全独立的 class 库,仅供前端引用。服务端和客户端被设计成分离的,让后台和前台远离。

我知道以下内容您可能已经知道,但我想重申并澄清:MVC 代表模型、视图、控制器(很明显),但这是它们各自的作用:

模型:可以将模型视为您的平均值 class。它包含与特定对象相关的结构和功能,以及模型的 CRUD(大多数情况下,实际模型和 CRUD 也是分开的,但联系和关联非常紧密)。模型是您的应用程序用来理解如何交流、计算和构造的。

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

控制器:这是模型和视图之间的联络人。它接受来自客户端的请求,将其发送到模型,然后 returns 构建模型。然后控制器执行任何必要的计算,并将模型传递给视图。控制器本质上是向视图描述了模型——它解释了实体如何交互和相互关联。

这样想: 我有一个名为 ApplicationUser 的模型和一个名为 ApplicationUserCRUD 的 CRUD class。客户端登录到我的站点(视图层),该站点向我的控制器发送请求。控制器接受他们的请求(在这种情况下,假设请求是他们的用户名和密码),并将其传递给 CRUD(控制器层)。然后 CRUD 检查用户是否存在,以及密码是否匹配(模型层)。然后,当它被确认时,它将信息发送给模型。然后模型 returns 到控制器,控制器将其传递给视图以构建视图。

如果您尝试在模型中执行逻辑和计算,则说明您没有正确使用 MVC。逻辑和计算在 Controller 中执行,有时在 View 中执行,在某些情况下在 Helper class.

中执行

助手 class 是与特定 Area/View 无关的控制器。

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

希望对您有所帮助!