Javascript 如何为我的数据建模?像主干这样的东西适合吗?

Javascript 如何为我的数据建模?像主干这样的东西适合吗?,javascript,backbone.js,angularjs,Javascript,Backbone.js,Angularjs,我正在使用angular js,我正在寻找一种建模数据的方法。我受到主干网的启发,开始写一些类似主干网模型的东西。在主干模型中,有访问模型成员的get和set方法。 与使用model.attributes相比,使用get和set方法的优点是什么? 如果我不需要我的角度模型来触发更改事件,那么创建类似于Backbone.Model的get和set的get和set方法值得吗 编辑 更清楚地说,我想问的是,与直接访问字段相比,创建一个set和get方法是否有优势。如果没有任何优势,为什么骨干员工决定这

我正在使用angular js,我正在寻找一种建模数据的方法。我受到主干网的启发,开始写一些类似主干网模型的东西。在主干模型中,有访问模型成员的get和set方法。 与使用model.attributes相比,使用get和set方法的优点是什么? 如果我不需要我的角度模型来触发更改事件,那么创建类似于Backbone.Model的get和set的get和set方法值得吗

编辑
更清楚地说,我想问的是,与直接访问字段相比,创建一个set和get方法是否有优势。如果没有任何优势,为什么骨干员工决定这样做?

Angular的“模型”是javascript中的任意对象

如果你在angularjs.org上查看教程

数据在控制器中定义。所以做一个数组,只要做

$scope.todos = [
    {text:'learn angular', done:true},
    {text:'build an angular app', done:false}];
获取/设置只是普通的javascript:

获取长度:$scope.todos.length

设置为空:$scope.todos=[]

在html视图中,如果变量在同一控制器下,只需调用该变量

<div ng-controller="TodoCtrl">
    <span>{{todos.length}}</span>
</div>

您只需要创建一个保存数据的服务,您可以考虑模型实例或集合之类的服务。例如,您有一些像Book这样的域类,您可以做的是创建一个服务“BookListService”,它将负责CRUD和/或业务逻辑

像这样的

function Book(title, author){
   this.title = title;
   this.author = author;
   this.isRead = false;
}

Book.prototype.markAsRead = function(){
   this.isRead = true
}



angular.module('someModule', []).factory('BookListService', function($http){
   var service {
         books: [],
         load: function(){
             $http.get('/books').then(function(res){
                 angular.forEach(res.data, function(book){
                     service.books.push(new Book(book.title, book.author))
                 })
             })
         }
    };
    return service; 
})

起初,我在这方面遇到了一些麻烦,因为Angular看起来很强大,所以我希望模型实现有一个大的答案。答案就是简单地使用JS对象。Angular拥有您自己轻松创建模型所需的所有工具,无需使用主干,我也读过,Angular并不是真正的方法。如果您查看$emit、$broadcast、$on,您就有了模型更新的事件。若您想创建对象的实例而不是单例,那个么让您的工厂返回一个实例。我认为这是一个好的开始。如果这不够具体,请道歉


如果您正在寻找要使用的软件包,请尝试。

我知道。我试图在一个真实的类中对json数据建模,该类可以处理状态、生成逻辑、侦听和绑定事件。您的答案与数据建模无关。普通JavaScript对象建模对象有什么问题?与主干不同,Angular允许您坚持使用JavaScript在MVC中处理M,并为您处理其余的:此外,没有丑陋的get、set,当您更改控制器中的内容时,它会自动知道纯JavaScript对象无法维护状态、触发或侦听事件,你不能把模型相关的逻辑方法等等放在上面。当然可以,这就是变量的全部意义。。。它们在应用程序中维护状态。主干网迫使您使用Backbone.model来处理东西,因为它是一个原始的、不推荐使用的框架,设计时人们还不知道如何构建web应用程序。如果你只是把它放在$scope中,Angular会自动跟踪它发生了什么,或者你可以使用$apply。Angular sports数据绑定,当情况发生变化时,您不需要通知它,它会自行解决问题。这里有一个角度教程,让您开始@Benjamin Grunbaum:当您开发大型应用程序时,有许多模型彼此绑定。不仅仅是模型到视图。更重要的是,这里有一个普通对象无法解决的示例:我有一个为用户管理数据的对象。此对象侦听名为“用户注销”的事件。每当用户注销时,此对象都知道清除其数据。到目前为止,我甚至没有提到控制器。如果您正在构建大规模应用程序,您必须设计数据。事实上,模型甚至意识到UI交互,这表明imo的设计很差。MV*中的模型甚至不应该意识到它是UI环境的一部分,至少框架不应该强迫这一事实。在我看来,模型接收到“用户注销”这一事实表明,从一开始关注点的分离就很糟糕。此外,即使在JavaScript中没有主干,也很容易使对象成为事件发射器。无论如何,安全性应该位于不同的领域,最有可能是作为一种服务,我认为我想要的词是方面。我知道这一点。我想问的是,与直接访问字段相比,创建一个set和get方法是否有优势。如果没有任何优势,为什么主干网的人会选择这样做?@Naor因为主干网是一个幼稚的轻量级实现,Angular是一个由Misko Havery这样的人支持的成熟框架。@Benjamin Grunbaum:称Angular为成熟框架是幼稚的。