更好的设计AngularJS服务的方法

8
我正在编写一个与REST服务器交互的AngularJS客户端应用程序。
为了管理客户端/服务器交互,我正在使用$resource抽象。实际上,我将每个资源都编写为单独的service,并仅在将使用它的控制器中注入它。
我已经开始使用angularjs-seed进行开发,因此在我的单独的services.js文件中,我有越来越多的服务:
angular.module('testReqService', ['ngResource']).
    factory('TestReq', function($resource){
    return $resource('http://test-url.com/api/test', {}, {});
});
angular.module('registerService', ['ngResource']).
    factory('Register', function($resource){
    return $resource('http://test-url.com/api/user/new', {}, {});
});
//More services here...

一切正常,但我想知道这是否是最佳方法。

那么,是编写不同的服务来处理不同的REST请求并仅将它们注入到需要它们的控制器中更好,还是编写一个单一的服务,为每个请求编写不同的方法和URL更好呢?


通常我会编写一个包含相关函数子集的单个服务。虽然这只是我的做法,但无论如何,我对这个问题很感兴趣。 - tymeJV
1个回答

12

我更喜欢第二种方法:

var resources = angular.module("myapp.resources", ['ngResource']);

resources.factory('Constants', [
    function() {
        return {
            RESOURCE_URL: "http://www.example.com/rest"
        }
    }
]);

resources.factory('Rest', ['Constants', '$resource', function(C, $resource) {
    return {
        Users: $resource(C.RESOURCE_URL + '/users/:id', {
            id: '@id',
        }, {})
        , Posts: $resource(C.RESOURCE_URL + '/posts/:user', {
              user: '@'
        }, {})
    }
}]);

当您拥有多个资源时,在控制器中管理所有依赖关系可能会非常麻烦。因此,您只需要注入一个单一的依赖项即可。在我看来,这样阅读控制器也更容易理解:

$scope.user = Rest.Users.get({id: 1});

更易理解

$scope.user = Users.get({id: 1});

我也喜欢这种方法,阅读起来更加轻松,特别是在你不断添加更多内容的情况下。 - tymeJV
我也喜欢这种方法。我想我会使用混合方法,尝试将所有相关资源合并到同一服务中。 - Atropo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接