2012-08-22 9 views
10

¿Puede ayudarme por favor a considerar dónde ubicar la lógica de negocios específica de recursos (servicios) en AngularJS? Siento que debería ser genial crear una abstracción tipo modelo sobre mi recurso, pero no estoy seguro de cómo.dónde ubicar la lógica específica de los recursos

llamada a la API:

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

de recursos (en 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} 
    }) 
]) 

me gustaría hacer algo como:

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

c.months_since_creation() 
=> '1 month' 

Gracias mucho por cualquier idea. Adam

Respuesta

18

El mejor lugar para la lógica que necesita ser invocada en una instancia de un objeto de dominio sería un prototipo de este dominio objeto.

Se podría escribir algo por el estilo:

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

Consulte también la página de inicio angularjs.org, la sección "Cablear un back-end", la pestaña/código mongolab.js, donde el prototipo también se usa para extender la clase de recursos. –

0

Es posible que desee echar un vistazo a mi respuesta a this SO question el tema relacionado.

Con esta solución, la lógica específica del dominio entra en la clase de entidad de dominio personalizado (en particular, su prototipo).

Cuestiones relacionadas