2012-08-22 17 views
10

Puoi aiutarmi a considerare dove posizionare la logica di business specifica delle risorse (servizio) in AngularJS. Sento che sarebbe bello creare qualche astrazione simile al modello sulla mia risorsa, ma non sono sicuro di come.dove posizionare la logica specifica delle risorse

API chiamata:

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

Resource (in CoffeScript):

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} 
    }) 
]) 

mi piacerebbe fare qualcosa di simile:

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

c.months_since_creation() 
=> '1 month' 

Grazie mille per tutte le idee. Adam

risposta

18

Il posto migliore per la logica che deve essere invocato su un'istanza di un oggetto dominio è un prototipo di questo dominio.

Si potrebbe scrivere qualcosa del genere:

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

Vedere anche la homepage di angularjs.org, la sezione "Wire up a Backend", la scheda/codice mongolab.js, in cui il prototipo viene utilizzato anche per estendere la classe di risorse. –

0

si potrebbe desiderare di dare un'occhiata alla mia risposta a this SO question su argomento correlato.

Con tale soluzione, la logica del dominio specifico entra nella classe di entità dominio personalizzata (in particolare, il suo prototipo).

Problemi correlati