Trying to figure out whether it's better to create a generic $resource driven data service or multiple services for different calls.
For example:
I have api/user/:userId/events/:eventId and say, api/user/:userId/beers/:beerId
Variant (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});
}
Variant (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});
}
Which is better, and why? Or something altogether different?
The examples I've seen have only been one-dimensional, for example Movies, but not Users plus Movies plus Music.
Thanks!
You should use approach B for sure. Even better separate your files for each $resource. For example you could have something like this folder structure for each module that ties to a resource and router.
Js/
components/
beers/
beers-resource.js
beers-controller.js
beers-router.js
wines/
wines-resource.js
wines-controller.js
wines-router.js
This is the best way if you ask me since youir code will be easier to read and maintain in the long run.