2013-11-14 10 views
5

私はいくつかのサンプルアプリをAngularでビルドしています。私はモデルが作成され/格納されている場所を探しています。モデルはどこに保存/作成しますか?

customer.js:

function customer(){ 
    this.firstName; 
    this.lastName; 
} 

customer.prototype.getFullName = function(){ 
    return this.firstName + ' ' + this.lastName; 
} 

そして、何私も見ることは工場の使用である:

私はこのように、時にはモデルはJavaScriptファイルプレーンに格納されていることに気付きましたcustomerFactory.js:

app.factory("customer", function(){ 
    return function(){ 
    this.firstName; 
    this.lastName; 

    this.getFullName = function(){ 
     return this.firstName + ' ' + this.lastName; 
    }; 
    }; 
}); 

私の質問は、モデルをどこに保存するのですか?その人は他の人よりも多くの利点がありますか?

答えて

1

私は、特にモデルを作成するために工場を使用するという第2のアプローチを好んでいます。

myApp.factory('Models', [function() { 
    return { 
     Customer: (function() { 
      var cls = function(obj) { 
       this.firstName = obj && obj.firstName || null; 
       this.lastName = obj && obj.lastName || null; 
      } 
      cls.prototype.getFullName = function() { 
       return this.firstName + ' ' + this.lastName; 
      }; 
      return cls; 
     })(), 
     Order: (function() { 
      var cls = function(obj) { 
       this.id = obj.id || null; 
       this.amount = obj.amount || null; 
      } 
      /* methods */ 
      return cls; 
     })() 
    } 
}]); 

このようにして、コントローラに1つの依存関係を注入するだけで、オブジェクトが定義されたモデルであることが明確になります。

myApp.controller('myCtrl', ['$scope', 'Model', function($scope, Model) { 
    $scope.customer = new Model.Customer({ 
     firstName: "Beterraba" 
     , lastName: "Abacate" 
    }); 
}]); 
+0

ありがとう、ちょうど好奇心から:1)「cls」は何を表しますか? 2)なぜCustomerオブジェクトが自分自身を呼び出すのですか? 3)すべてのモデルを同じ工場に置いていますか? – Martijn

+0

@Martijn(1) "cls"は "class"を表し、jsの予約語です。 (2)オブジェクトは自分自身を呼び出すので、一度しか彼の体を評価しません。それが普通の関数ならば、すべての 'new'呼び出しはクラス全体を再び評価します。 (3)コントローラーに何回か注射するのを避けるために、すべてを1つの工場に入れたい。 – Beterraba

1

私はmodelsというフォルダを作成することを好むと各モデルには、工場のように定義独自のファイルを、取得します。私も$resourceを使って私のモデルを定義していますので、$httpの呼び出しを心配する必要はありません。

なぜですか?これは、角型アプリケーションの構築方法です。そうすることで、コントローラー、指令などにそれらを注入することができます。あなたのモデルを角度に依存しないようにしたいのであれば問題ありません。これは「ポートとアダプタ」アーキテクチャに適合します。後で工場として公開するだけです。それは慣習I本当に好きです...

app.factory("Customer", function(){ return Models.Customer; }); 
app.factory("Order", function(){ return Models.Order; }); 

をまた、私は首都で私のクラスのオブジェクトに名前を付けるのが好きということに気づく:別のライブラリにあなたの角度に依存しないコードを分離した後、ちょうど後で注射のためにそれらを公開それがインスタンス化される「クラス」であることを示すために使用されます。

+0

あなたのケースでは、モデルを定義する2つの方法があります:1つはファイル内、もう1つはリソースを使用していますか? Angular agnosticでは、Angularを認識しないのですか?だから単純なジャバスクリプト? – Martijn

+1

右。個人的には、私はそれをすべてサービスに入れることを好みます。しかし、あなたのモデル/ビジネスロジック/ユーティリティーコードが単なる純粋なJavaScriptであり、Angularについて何も知らないと言うアーキテクチャの "ポートとアダプタ"スタイルのような人もいます。それから、上のように配線してください。この例では、Model.Customerは純粋なJavaScriptであり、Angularの範囲内には存在しませんが、 'factory'を使用して「適合」されています。 –

関連する問題