0

私は Angular を使い始めたばかりで、ベース サービス クラスを用意するのが良い考えかどうか疑問に思っています。

    var app = angular.module('UserList', ['ngResource']);

    app.service('BaseService', function() { 
        return {
            resource: '',

            setResource: function(res) {
                resource = res;
                return this;
            },

            all: function() {
                return resource.query();
            },

            find: function(id) {
                return resource.get({id: id});
            },

            save: function(user) {
                return resource.save(user)
            }
        }
    });

    app.service('UserService', ['$resource', 'BaseService', function($resource, $base) {
        var resource = $resource('/users/:id', {id: '@id'});    

        return $base.setResource(resource);
    }]);

    app.controller('UserCtrl', ['$scope', 'UserService', function($scope, User) {
        $scope.users = User.all();

        $scope.addUser = function() {
            $scope.users.push({
                first_name: $scope.user.first_name
            })

            User.save($scope.user);
        };
    }]);

私の考えでは、たとえば、新しいエンドポイントを持つ「PostService」を追加するのは非常に簡単です。

    app.service('PostService', ['$resource', 'BaseService', function($resource, $base) {
        var resource = $resource('/posts/:id', {id: '@id'});    

        return $base.setResource(resource);
    }]);

このアプローチに関するコメント、または Angular に関するヒントや推奨事項 (戦略、命名規則など) があれば、ぜひお寄せください。

よろしく、クリス

4

1 に答える 1

0

基本サービスを持つことは理にかなっていますか?もしそうなら、これはそれを行う良い方法ですか?

確かにその良いデザイン。すべてのオブジェクト指向言語と同様に、継承を使用することをお勧めします。継承の主な利点は、コードを再利用するための正式なメカニズムを提供することです。リファクタリング プロセスの一環として、ビジネス ロジックの共有部分を派生サービスからベース サービスに移動して、コードの重複を回避することでコードの保守性を向上させることができます。

このアプローチに関するコメント、またはヒント/推奨事項があれば...

$resourceのドキュメントに関しては$resource('/posts/:id', {id: '@id'});、例の が を返しますpromise$resourceに依存するため$httpです。すべてのサービスが非同期であるとは限りません。多くのサービスがある場合は、これらのサービスが非同期であることをソートします (または、後置修正を追加して署名します)。

于 2013-10-11T22:18:35.877 に答える