40 votes

Est-ce une mauvaise pratique d'utiliser le module requireJS comme un singleton?

J'ai l'intention d'utiliser le modèle suivant pour faire usage de la requireJS module d'agir comme un singleton. Veuillez noter que classA renvoie une instance de type "classA", tandis que le reste de la classe classB, classC, et principal de retourner le type de la classe à partir du module. Tous ces éléments sont les classes basées sur le framework MooTools Classe.

L'idée est d'utiliser le classA comme disponible dans le monde entier singleton, les méthodes sont juste des charges. Toutes les pensées que si c'est acceptable modèle à utiliser?

Sera-ce de revenir à la mords-moi à un stade ultérieur? Je n'ai pas essayé de lancer r.js sur le projet, de sorte que je suis un peu inquiet, et de regarder pour quelques conseils.

    // classA.js
    define([], function() {
        var classA = new Class({

            initialize: function (regionId) {
                // perform some Initialization.
                this.data = null;
            },

            doSomething: function(param) {
                // some thing.
                this.data = param;
            }
        };

        return new classA();
    });

    // classB.js
    define(["classA"], function(classA) {
        var classB = new Class({

            initialize: function (regionId) {
                // perform some Initialization.
            },

            doSomethingElse: function() {
                // some thing.
                classA.doSomething("Go back to Work Now!");
            }
        };

        return classB;
    });


    // classC.js
    define(["classA"], function(classA) {
        var classB = new Class({

            initialize: function (regionId) {
                // perform some Initialization.
            },

            doSomethingElse: function() {
                // some thing.
                classA.doSomething("Time to Play!");
            }
        };

        return classC;
    });


    // main.js
    define(["classA", "classB", "classC"], function(classA, classB, classC) {
        var main = new Class({

            initialize: function (regionId) {
                // perform some Initialization.
                this.b = new classB();
                this.c = new classC();
            },

            doEverything: function() {
                // some thing.
                this.b.doSomethingElse();
                classA.doSomething("Nap Time!");
            }
        };

        return main;
    });

Merci beaucoup à l'avance...

37voto

ggozad Points 8910

Non, je ne peux pas penser à une raison contre l'utilisation de singletons avec require.js.

Votre définition de module doit exporter le singleton. La façon dont vous le faites est très bien, puisque c'est un singleton, vous pourriez également être en mesure d'éviter l' new. J'utilise quelque chose comme

define(function (require) {
    var singleton = function () {
        return {
            ...
        };
    };
    return singleton();
});

La première require pour le module de charge et de l'exporter. Un autre module de la demande de votre singleton va réutiliser le déjà exporté un.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X