10

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'

アイデアをありがとうございました。アダム

4

2 に答える 2

18

ドメインオブジェクトのインスタンスで呼び出す必要のあるロジックの最適な場所は、このドメインオブジェクトのプロトタイプです

あなたはそれらの線に沿って何かを書くことができます:

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;    

}]);
于 2012-08-22T17:35:36.337 に答える
0

関連するトピックに関するこのSOの質問に対する私の回答をご覧ください。

このようなソリューションでは、ドメイン固有のロジックがカスタムドメインエンティティクラス(特にそのプロトタイプ)に入ります。

于 2013-07-16T13:54:55.033 に答える