Где разместить специфическую для ресурса логику
Можете ли вы мне помочь, пожалуйста, подумать, где разместить специфическую бизнес-логику ресурса (услуги) в AngularJS. Я чувствую, что должно быть здорово создать некоторую абстракцию модели по сравнению с моим ресурсом, но я не уверен, как это сделать.
API-вызов:
> GET /customers/1
< {"first_name": "John", "last_name": "Doe", "created_at": '1342915200'}
Ресурс (в 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}
})
])
Я хотел бы сделать что-то вроде:
c = CustomerService.get(1)
c.full_name()
=> "John Doe"
c.months_since_creation()
=> '1 month'
Большое спасибо за любые идеи.
Адам
Ответы
Ответ 1
Лучшим местом для логики, которое нужно вызвать в экземпляре объекта домена, будет прототип этого объекта домена.
Вы можете написать что-то по этим строкам:
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
Возможно, вы захотите взглянуть на мой ответ на этот вопрос SO > по соответствующей теме.
При таком решении логика специфики домена переходит в собственный класс сущности домена (в частности, его прототип).