2016-12-07 9 views
1

Это источник для BackboneFactory, позвоночник эквивалент FactoryGirl:Как уничтожить созданные объекты в BackboneFactory и где они хранятся?

// Backbone Factory JS 
// https://github.com/SupportBee/Backbone-Factory 

(function(){ 
    window.BackboneFactory = { 

    factories: {}, 
    sequences: {}, 

    define: function(factory_name, klass, defaults){ 

     // Check for arguments' sanity 
     if(factory_name.match(/[^\w-_]+/)){ 
     throw "Factory name should not contain spaces or other funky characters"; 
     } 

     if(defaults === undefined) defaults = function(){return {}}; 

     // The object creator 
     this.factories[factory_name] = function(options){ 
     if(options === undefined) options = function(){return {}}; 
     arguments = _.extend({}, {id: BackboneFactory.next("_" + factory_name + "_id")}, defaults.call(), options.call()); 
     return new klass(arguments); 
     }; 

     // Lets define a sequence for id 
     BackboneFactory.define_sequence("_"+ factory_name +"_id", function(n){ 
     return n 
     }); 
    }, 

    create: function(factory_name, options){ 
     if(this.factories[factory_name] === undefined){ 
     throw "Factory with name " + factory_name + " does not exist"; 
     } 
     return this.factories[factory_name].apply(null, [options]);   
    }, 

    define_sequence: function(sequence_name, callback){ 
     this.sequences[sequence_name] = {} 
     this.sequences[sequence_name]['counter'] = 0; 
     this.sequences[sequence_name]['callback'] = callback; 
    }, 

    next: function(sequence_name){ 
     if(this.sequences[sequence_name] === undefined){ 
     throw "Sequence with name " + sequence_name + " does not exist"; 
     } 
     this.sequences[sequence_name]['counter'] += 1; 
     return this.sequences[sequence_name]['callback'].apply(null, [this.sequences[sequence_name]['counter']]); //= callback; 
    } 
    } 
})(); 

Так это выглядит, как после того, как какая-то сложная логика, метод создания создаст новый объект модели, мы определяем в позвоночнике. Если у нас есть модель User, то Backbone.create(User) создаст новый пользовательский объект.

  • Куда хранятся эти объекты?
  • Имеют ли они одну и ту же базу данных, что и производство?
  • Если это в памяти, они в конечном итоге собираются с мусором?

Короче говоря, меня беспокоит, что происходит с этими объектами при запуске набора тестов.

+0

Я вижу, что вы задали другие вопросы с этого момента. У вас есть какие-либо проблемы с моим ответом, на который вы хотите обратиться? –

ответ

1

Если у нас есть User модели ... Backbone.create(User) создаст новый объект пользователя.

Это BackboneFactory.create('user'), который работает только если вы ранее определили завод по User с помощью BackboneFactory.define('user', User);.

Где хранятся эти объекты?

В следующих свойств глобального объекта BackboneFactory:

factories: {}, 
sequences: {}, 

ли они одни и те же базы данных, как производство?

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

Скажет, у вас есть эта модель:

var User = Backbone.Model.extend({ 
    urlRoot: "api/user", 
    defaults: { 
     name: "Foo", 
     randomNumber: 4 
    } 
}); 

инстанцирование с заводом:

BackboneFactory.define('user', User); 
// somewhere later 
var instance = BackboneFactory.create('user', { name: "bar" }); 

таким же, как инстанцировании вручную.

var instance = new User({ name: "bar" }); 

Если это в памяти, они мусора в конечном итоге?

Похоже, что он не обеспечивает простую функцию для удаления фабрики, но это не очень полезно, потому что вы создаете фабрики, чтобы использовать их в своем приложении.

Вы можете вручную удалить заводскую хэш и/или последовательности:

BackboneFactory.factories = {}; 
BackboneFactory.sequences = {}; 

Но я бы не стал делать, что в нормальном потребительной случае, если не возникает конкретная проблема. Для набора тестов, возможно, это самый простой способ «сбросить» объект BackboneFactory.


Это, как говорится, я бы не использовал эту библиотеку как есть. Есть отличные идеи, но в коде отсутствует много улучшений для такой простой библиотеки. Один большой нет-нет - это глобальный по умолчанию, и невозможно создать разные экземпляры BackboneFactory. Он имеет problems of the singleton pattern.

 Смежные вопросы

  • Нет связанных вопросов^_^