在meteorJs应用程序中放置复杂逻辑的位置?如何处理应用程序的设计?

时间:2014-12-09 09:46:53

标签: javascript architecture meteor

背景:
我是meteorJs的新手,只用它构建了基本的应用程序 - Leader Board和Todo列表在线跟踪教程。现在我对基础知识有了一些了解,我正在构建一个基于流星的在线策略游戏。但是,我不熟悉Meteor Applications的设计模式。

问题
有两个对立的将军,他们指挥各种单位。需要一些逻辑来确定它们之间的战斗结果。

我现在有这个: 基于FrontEnd用户交互,我调用meteor方法来更新General集合。下面的代码显示了我如何将1个步兵加入普通军队:

  Template.generalData.events({
   'click #button' : function(){
      var selectedGeneral = Session.get('selectedGeneral');
      Meteor.call('modifyTroops', selectedGeneral, 'infantry', 1)
    },
      // more events 
   });

并在服务器端:

    if (Meteor.isServer) {   
     Meteor.methods({
        'modifyTroops' : function(selectedGeneral, unit, val){
          obj = {};
          obj[unit] = val;
          Generals.update({_id:selectedGeneral}, {$inc: obj});
        },
              // more methods   
    });

这一切都很简单。我甚至可以选择哪一位将军在他们的军队最终确定之后会互相争斗。

 Like so: 
   Template.battleGenerals.events({
   'click #fight' :function(){
          var selectedGeneral1 = Session.get('selectedGeneral1');
          var selectedGeneral2 = Session.get('selectedGeneral2');
          var General1 = Generals.findOne(selectedGeneral1);
          var General2 = Generals.findOne(selectedGeneral2);
          // more code 
          // call a method?
     }
  });

那么我在哪里放置战斗逻辑?在一个方法?和方法只对MongoDB后端进行更改。我需要反应性地显示哪个单位杀死了哪个单位(不是图形 - 只是文字解释正在发生的事情)。我怎么做?

此外,我在每个通用下都有14种类型的单位,所以我不能将所有逻辑都放在一个方法下。我需要使用函数来划分我的逻辑代码并在方法中需要的地方调用它们吗?

我一直在考虑使用的另一件事是中介模式并将所有逻辑放在包中。 看完这篇文章后: http://www.manuel-schoebel.com/blog/meteorjs-package-only-app-structure-with-mediator-pattern 我还有更多问题。这是正确的方法吗?如果是这样的话 - 包中的逻辑究竟在哪里?

如果有人知道如何处理此问题,请分享您的想法。

感谢。

1 个答案:

答案 0 :(得分:1)

从长远来看,

Splitting your code into packages是一种可以带来回报的策略。您不需要发布包 - 您可以将它们保存在您的仓库中,位于packages目录下。