1

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]
    }
4

1 に答える 1