Javascript MVC中的模型可以进行计算吗

Javascript MVC中的模型可以进行计算吗,javascript,model-view-controller,model,javascriptmvc,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.getCh

例如,这是否适用于模型:

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();
};
var模型=函数模型(){
此.chapterIndex=0;
这个.pageIndex=0;
this.next=true;
this.prev=false;
this.getCurrentpage=函数getCurrentpage(){
返回chapterList[this.chapterIndex].pages[this.pageIndex];
};
this.getChapterPageLength=函数getChapterPageLength(){
返回chapterList[this.chapterIndex].pages.length;
};
this.getTotalChapters=函数getTotalChapters(){
返回chapterList.length;
};
this.canGoForwardInChapters=函数canGoForwardInChapters(){
返回this.chapterIndex+1
}

或者像CangoForwardInCapters这样的功能应该在控制器中处理吗

最佳做法是什么


我读这本书是作为我来这里的参考书。

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

长回答:不,MVC不是这样设计的。MVC是专门为将逻辑与视图分离而设计的。事实上,在.NET中,数据层通常是一个完全独立的类库,前端只引用它。服务器和客户端被设计为独立的,以使后端和前端彼此远离

我知道以下几点,你可能已经知道了,但我只想重申和澄清一下:MVC代表模型、视图、控制器(显然),但这是每一个的作用:

模型:模型可以被认为是你的普通班级。它包含与特定对象相关的结构和功能,以及模型的CRUD(大多数情况下,实际模型和CRUD也是分离的,但联系和关联非常紧密)。模型是应用程序用来理解如何通信、计算和构造的工具

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

控制器:这是模型和视图之间的联系。它接收来自客户机的请求,将其发送到模型,然后模型返回一个构造的模型。然后,控制器执行任何必要的计算,并将模型传递给视图。控制器基本上向视图描述了模型-它解释了实体如何相互作用和关联

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

如果您试图在模型中执行逻辑和计算,那么您没有正确使用MVC。逻辑和计算在控制器中执行,有时在视图中执行,有时在助手类中执行

助手类是与特定区域/视图无关的控制器

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


希望这有帮助

StackOverflow不是询问最佳实践的最佳场所。更多的是:“此代码不工作,这是错误消息(或预期与实际行为)。如何修复它?”我们更喜欢可以标记为正确的问题。最佳实践问题取决于个人偏好和需要处理的其他代码,可能会有多个不同但仍然“正确”的答案感谢您花了大量时间。这使我明白了一些事情。