AngularJS アプリで使用するスマート オブジェクト/関数を Javascript で作成する必要があります。これにはどのパターンを使用すればよいですか?私は現在、調査した一般的な JavaScript の「モジュール」パターンを使用していますが、AngularJS の方法でこれらのオブジェクト/関数 (以下) をモデル化する必要があるかどうか疑問に思っています。おそらく「サービス」として?
私は Java のバックグラウンドを持っているため、ヘルパー メソッドを持つオブジェクトを「サービス」と呼ぶことに少し違和感を覚えます。しかし、JavaScript/AngularJS の定義を調整する必要があるかもしれません。
アプリは基本的な評価システムです。2 つの主要なオブジェクト/機能は次のとおりです。
レッスンスコアカード
/*
* LessonScoreCard
*
* Is a "module" that keeps track of the score a user has for a given lesson
* and whether or not for a given question there are more correct answers
* that can be made.
*/
var lessonScoreCard = (function() {
//Map of questions to scores
var privateQuestionNumberToScoreMap = {};
//API to be used by external clients
var publicAPI = {
//A public function utilizing privates
setScore: function(questionNumber, score) {
privateQuestionNumberToScoreMap[ questionNumber ] = score;
},
//Sum the total score
getTotalScore: function( ){
var totalScore = 0;
for( var questionNumber in privateQuestionNumberToScoreMap ){
totalScore += privateQuestionNumberToScoreMap[questionNumber];
}
}
};
return publicAPI;
})();
解答
/*
* AnswerKey
*
* Is a "module" that takes an answer key and performs functions
* related to it.
*/
var answerKey = (function() {
//Set of right answers
var privateQuestionNumberToAnswerArrayMap;
//API to be used by external clients
var publicAPI = {
setAnswerKey: function(answerKeyModel) {
privateQuestionNumberToAnswerArrayMap = answerKeyModel;
},
// A public function utilizing privates
isCorrect: function(question, answer) {
var isCorrect = false;
var answerArray = privateQuestionNumberToAnswerArrayMap[ question ];
if (answerArray.indexOf(answer) !== -1) {
isCorrect = true;
}
return isCorrect;
},
getAnswerCount: function( question ){
var answerArray = privateQuestionNumberToAnswerArrayMap[ question ];
return answerArray.length;
}
};
return publicAPI;
})();
サンプル JSON 回答キー モデル
{
1: [1, 3],
2: [4]
}