関数に常に引数を渡すことをお勧めします。
- 関数が期待するパラメーターがより明確になります。
- すべてのパラメーターが関数に注入されるため、単体テストが容易になります (単体テストに適しています)。
次の状況を考慮してください。
$scope.addToDo = function(){
//This declaration is not clear what parameters the function expects.
if ($scope.parameter1){
//do something with parameter2
}
}
さらに悪いことに:
$scope.addToDo = function(){
//This declaration is not clear what parameters the function expects.
if ($scope.someobject.parameter1){ //worse
}
}
スコープの継承parameter2
は親スコープから来る可能性があるため、関数内にアクセスすると密結合parameter2
が作成され、その関数の単体テストを試みるときにも問題が発生します。
次のように関数を定義すると:
//It's clearer that the function expects parameter1, parameter2
$scope.addToDo = function(parameter1, parameter2){
if (parameter1){
//do something with parameter2
}
}
親スコープから継承された場合parameter2
でも、ビューから渡すことができます。単体テストを行う場合、すべてのパラメーターを渡すのは簡単です。
ASP.NET MVC を使用したことがある場合は、同様のことに気付くでしょう。フレームワークは、Request
またはHttpContext
オブジェクトから直接アクセスするのではなく、アクション関数にパラメーターを挿入しようとします。
他の人が一緒に働くように言及した場合にも適していますng-repeat
私の意見では、角度のコントローラーとモデルは明確に分離されていません。$scope オブジェクトは、プロパティとメソッドを持つモデルのように見えます (モデルにはロジックも含まれています)。OOP のバックグラウンドを持つ人々は、次のように考えるでしょう: オブジェクトに属さないパラメーターのみを渡します。クラス Person が既に を持っているように、すべてのオブジェクト メソッドhands
を渡す必要はありません。hands
次のようなコード例:
//assume that parameter1 belongs to $scope, parameter2 is inherited from parent scope.
$scope.addToDo = function(parameter2){
if ($scope.parameter1){ //parameter1 could be accessed directly as it belongs to object, parameter2 should be passed in as parameter.
//do something with parameter2
}
}