Способ инкапсулировать (добавить конфиденциальность) для моделей в MVC?

Я называю пространство моими моделями и одним контроллером вот так:

var MC = {};

а затем добавил свойства по мере необходимости.

Например, код, который инициализирует все мои модели, выглядит так:

MC.initAll = function() {

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

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

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

Я планирую изменить это на цикл ... просто перебрать MC, и, если существует init (), выполнить его.

Единственная вещь, которая беспокоит меня об этой архитектуре, это то, что нет никакой конфиденциальности или инкапсуляции в традиционном смысле, что все является публичным.

Кроме того, я не создаю экземпляры своих моделей, я просто называю их функциями, но это почти то же самое, что создание экземпляров в .js.

Есть ли простой способ добавить конфиденциальность в мои модели и по-прежнему иметь их доступными как свойства в объекте.

Просто для примера вот моя самая простая модель:

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 () выполняется перед вызовом ajax, post () после, и init () вызывается через событие onload или подобное.

Вот контроллер, который фактически реализует это.

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 );  
            }

        } );
    }
};

Я хотел бы добавить конфиденциальность. Как мне это сделать и при этом сохранить свои модели доступными в качестве свойств объекта?

Related

Как создать глобальные объекты на основе экземпляров из локальной области?

Ответы на вопрос(2)

Ваш ответ на вопрос