2012-08-22 5 views
10

Czy możesz mi pomóc rozważyć, gdzie umieścić logikę biznesową zasobów (usługi) w AngularJS. Uważam, że powinno być wspaniale stworzyć abstrakcję przypominającą mój model, ale nie jestem pewien jak.gdzie umieścić logikę specyficzną dla zasobów

API wezwanie:

> GET /customers/1 
< {"first_name": "John", "last_name": "Doe", "created_at": '1342915200'} 

zasobów (w coffeescript):

services = angular.module('billing.services', ['ngResource']) 
services.factory('CustomerService', ['$resource', ($resource) -> 
    $resource('http://virtualmaster.apiary.io/customers/:id', {}, { 
    all: {method: 'GET', params: {}}, 
    find: {method: 'GET', params: {}, isArray: true} 
    }) 
]) 

chciałbym zrobić coś takiego:

c = CustomerService.get(1) 
c.full_name() 
=> "John Doe" 

c.months_since_creation() 
=> '1 month' 

dziękuję za wszelkie pomysły. Adam

Odpowiedz

18

Najlepszym miejscem dla logiki, która musi zostać wywołana na wystąpieniu obiektu domeny, byłby prototyp tego obiektu domeny :.

można napisać coś wzdłuż tych linii:

services.factory('CustomerService', ['$resource', function($resource) { 

    var CustomerService = $resource('http://virtualmaster.apiary.io/customers/:id', {}, { 
     all: { 
      method: 'GET', 
      params: {} 
     } 
     //more custom resources methods go here.... 
    }); 

    CustomerService.prototype.fullName = function(){ 
     return this.first_name + ' ' + this.last_name; 
    }; 

    //more prototype methods go here.... 

    return CustomerService;  

}]); 
+2

Zobacz także stronę domową angularjs.org, sekcję "Podłącz do zaplecza", kartę/kod mongolab.js, gdzie prototyp służy również do rozszerzenia klasy zasobów. –

0

Czasami warto spojrzeć na moją odpowiedź na this SO question o pokrewnej tematyce.

Dzięki takiemu rozwiązaniu logika specyficzna dla danej domeny przechodzi do niestandardowej klasy encji domeny (w szczególności jej prototypu).