2013-09-29 18 views
7

Jakie są główne korzyści backbone.wreqr ma ponad js obiektu, oba przypadki mające dostęp do marionetka za agregatora zdarzeń.
Nie przypisywanie/wywoływanie metod z obiektu działa tak samo jak polecenie/RequestResponse. Dla mnie nie widzę potrzeby implementacji tego innego niż nadawanie semantyczności/czytelności +1.Backbone.Wreqr vs JavaScript Object

https://github.com/marionettejs/backbone.wreqr
Czy ktoś może mnie oświecić, to moja pierwsza aplikacja szkieletowa (i modułowa).

Odpowiedz

12

Korzyści są:

  • obsługi zdarzeń i poleceń jest opcjonalne i nie trzeba by sprawdzić ręcznie siebie za undefined s
  • ewentualnie wiele uchwytów dla każdego przypadku
  • leniwa wykonania poleceń (pierwsze zdarzenie ogień, rejestr rozkazów później będzie natychmiast realizowane)
  • można zdefiniować zakres wykonania bez użycia dodatkowych metod, takich jak $.proxy, ...
+1

Dzięki, właśnie tego szukałem! Punkt # 1, więc jeśli żaden program obsługi nie jest obecny, żadne błędy nie zostaną wygenerowane po uruchomieniu polecenia.execute ("blackhole")? –

+0

@toxinhead that's right! – Creynders

8

Zapewnia implementacje kilku popularnych messaging patterns, w tym Event Aggregator Pattern,i Observer Pattern.

Te wzorce ułatwiają oddzielenie implementacji w celu zmniejszenia zależności obiektów. Rozważmy prostą grę typu "Combat" składającą się z czołgu i kilku celów. Bez wzorów wiadomości, zbiornik musi mieć wyraźny wiedzy na temat celów i jak one działają, i w rzeczywistości nie może istnieć bez definicji target:

var Tank = function(targets) { this.targets = targets }; 
Tank.prototype.fire = function() { 
    var self = this, 
     HpLoss = -500; 
    _.each(this.targets, function(target) { 
    if (self.isNear(target.coordinates) && target.canWithstand(HpLoss)) { 
      target.die(); 
    } 
} 


var target1 = new Target(coordinatesA, armorA); 
var target2 = new Target(coordinatesB, armorB); 
var tank = new Tank([target1, target2]); 

Korzystanie z wzorców, takich jak wiadomości obserwatora tank w powyższym kodzie nie robi” • potrzebuje wiedzy o swoich celach; raczej cele można określić dla siebie, czy powinni umrzeć

var Target = function() {} 
Target.prototype.calculateDamage = function(coordinates, damage) { 
    if (this.isNear(coordinates) && !this.canWithstand(damage)) { 
     this.die(); 
    } 
} 

var Tank = function() {}; 
Tank.prototype.fire = function() { 
    this.trigger('fire', { damage: 400, coordinates: this.location }); 
}; 

// Now Tank is entirely self-contained, and some external mediator can 
// make things happen at will: 

function main() { 
    var target1 = new Target(coordinatesA, armorA); 
    var target2 = new Target(coordinatesB, armorB); 
    var tank = new Tank(); 

    target1.listenTo(tank, 'fire', target1.calculateDamage, target1); 
    target2.listenTo(tank, 'fire', target2.calculateDamage, target2); 

    tank.fire(); 

    var target3 = new Target3(coordinatesB, armorB); 
    target3.listenTo(tank, 'fire', target3.calculateDamage, target3); 
} 
+1

Hej Chris, dziękuję za odpowiedź, chociaż nie odpowiada na moje pierwsze pytanie. Twój przykład ujawnia przepływ pracy subskrybent/wydawca zawarty w module Event Aggregator. Komendy Wreqr/RequestResponse są tym, co mnie traci, dopóki nie zostanie wyjaśnione, że te metody istnieją wyłącznie z powodów semantycznych/czytelności. –

+0

Wow, tak, całkowicie błędnie to przeczytałem. Przepraszam. –

+2

Jest to jednak wspaniały komentarz. –