Eine Möglichkeit, Modelle in der MVC zu kapseln (Privatsphäre hinzuzufügen)?

Ich benenne meine Modelle und einen einzelnen Controller wie folgt:

var MC = {};

und dann Eigenschaften nach Bedarf hinzugefügt.

Der Code, der alle meine Modelle initialisiert, sieht beispielsweise folgendermaßen aus:

MC.initAll = function() {

    MC.MASettings.init();
    MC.MATweet.init();

    MC.MUserTry.init();
    MC.MUserNew.init();
    MC.MUserExist.init();

    Su.UserOut.init();
    Su.Media.init();
}

Ich plane, dies in eine Schleife zu ändern ... durchlaufen Sie einfach MC, und wenn init () vorhanden ist, führen Sie es aus.

Das einzige, was mich an dieser Architektur stört, ist, dass es keine Privatsphäre oder Kapselung im herkömmlichen Sinne gibt, dass alles öffentlich ist.

Außerdem instanziiere ich meine Modelle nicht, sondern rufe sie nur als Funktionen auf. Dies entspricht jedoch im Wesentlichen der Instanziierung in .js.

Gibt es eine einfache Möglichkeit, meinen Modellen Privatsphäre zu verleihen und sie dennoch als Eigenschaften in einem Objekt verfügbar zu machen?

Nur als Beispiel hier ist mein einfachstes Modell:

MC.MUserTry = {
    init: function() {
        document.getElementById( 'ut_but' ).addEventListener( "click", function( ) {
            MC.Controller( MC.o_p( 'MUserTry' ) );
        }, false );
    },
    pre : function( o_p ) {
        o_p.page.email = document.getElementById( 'ut_but' ).getAttribute( 'data-email' );
        return o_p; 
    },
    post : function( o_p ) {
        sLocal( o_p.server.hash, o_p.server.privacy, o_p.server.name, o_p.server.picture, 'ma' );
        vStateUpdate( o_p.server.name, o_p.server.picture, o_p.server.privacy );
        vTPane( o_p.server.tweets ); vBPane( o_p.server.bookmarks ); 
        vFlipP( 'ma' ); 
    }
};

pre () wird ausgeführt, bevor ein Ajax-Aufruf, post () after und init () über ein Onload-Ereignis oder ähnliches aufgerufen werden.

Hier ist der Controller, der dies tatsächlich implementiert.

MC.Controller = function( o_p ) {

   console.log( 'o_p = ' + o_p.model );

   var t1, t2, t3, t4, 
       i1, i2, i3, i4,
       o_p_string_send;

    if( SU.get('debug') ) {
        t1 = new Date().getTime();
    }

    o_p = MC[ o_p.model ].pre( o_p );  

    if ( o_p.result !== 'complete' ) {
        o_p_string_send = JSON.stringify( o_p );

        if( SU.get('debug') ) {
            t2 = new Date().getTime();
            console.log( '---------------Server Send: \n ' + o_p_string_send );
        } 

        cMachine( 'pipe=' + o_p_string_send , function( o_p_string_receive ) {

            if( SU.get('debug') ) { 
                console.log( '---------------Server Receive: \n ' + o_p_string_receive ); 
                t3 = new Date().getTime();
            }

            o_p.server = JSON.parse( o_p_string_receive );

            MC[ o_p.model ].post( o_p );

            if( SU.get('debug') ) {
                t4 = new Date().getTime(); i1 = t2-t1 ; i2 = t3-t2 ; i3 = t4-t3; i4 = o_p.server.time;
                console.log( '---------------Time: \n Pre | Transit | Post | Server = ', i1, ' | ', i2, ' | ', i3,' | ', i4 );  
            }

        } );
    }
};

Ich möchte Privatsphäre hinzufügen. Wie mache ich das und halte meine Modelle trotzdem als Objekteigenschaften verfügbar?

verbunden

Wie erstelle ich globale, instanzbasierte Objekte aus dem lokalen Bereich?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage