Angular $ resource:为每个资源或灵活的数据服务提供数据服务以进行多次调用是否更好?

时间:2016-05-16 00:27:19

标签: angularjs angular-resource api-design

试图弄清楚为不同的呼叫创建通用的$ resource驱动的数据服务或多种服务是否更好。

例如:

我有api / user /:userId / events /:eventId并说,api / user /:userId / beers /:beerId

变体(A):

function UserDataService( $resource, API_URL ) {
    return function (whichResource){
        return $resource( API_URL + whichResource, {userId: '@_userId'} );
    }
}

UserMainController( UserDataService, RESOURCE ) {
    var UserMainCtrl = this;
    UserMainCtrl.events = UserDataService( RESOURCE.USERS.EVENT.LIST ).get({userId:1});
    UserMainCtrl.beers = UserDataService( RESOURCE.USERS.BEER.LIST ).get({userId:1});

}

变体(B):

function UserEventService( $resource, API_URL, RESOURCE ) {
   return $resource( API_URL + RESOURCE.USERS.EVENT.LIST, {userId: '@_userId'} );

}

function UserBeerService( $resource, API_URL, RESOURCE ) {
   return $resource( API_URL + RESOURCE.USERS.EVENT.LIST, {userId: '@_userId'} );
}  

UserMainController( UserService, UserBeerService) {
    var UserMainCtrl = this;
    UserMainCtrl.events = UserEventService.get({userId:1});
    UserMainCtrl.beers = UserBeerService.get({userId:1});
}

哪个更好,为什么?或者完全不同的东西?

我见过的例子只是一维的,例如电影,但不是用户加电影和音乐。

谢谢!

1 个答案:

答案 0 :(得分:2)

你应该确保使用方法B.甚至可以更好地为每个$资源分隔文件。例如,对于与资源和路由器相关联的每个模块,您可以使用此文件夹结构。

Js/
   components/
              beers/
                  beers-resource.js
                  beers-controller.js
                  beers-router.js
              wines/
                  wines-resource.js
                  wines-controller.js
                  wines-router.js

如果您问我这是最好的方法,因为从长远来看,您的代码将更容易阅读和维护。