背景:
我是一个meteorJs新手,仅按照在线教程使用它构建了基本应用程序 - 排行榜和待办事项列表。现在我对基础知识有了一些了解,我正在基于 meteor 构建一个在线策略游戏。不过,我对 Meteor 应用程序的设计模式不太熟悉。
问题:
有两名对立的将军,他们指挥着不同的部队。确定他们之间战斗的结果需要相当多的逻辑。
我现在有这个
:
基于前端用户交互,我调用meteor方法来更新常规集合。下面的代码显示了如何向将军的军队添加 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 后端进行更改。我需要 react 性地显示哪个单元杀死了哪个单元(不是图形 - 只是解释正在发生的事情的文本)。我怎么做?
此外,我在每个 General 下有 14 个类型单元,所以我不能将所有逻辑都放在一个方法下。我需要使用函数来划分我的逻辑代码并在方法中需要的地方调用它们?
我一直在考虑使用的另一件事是中介模式并将所有逻辑放入包中。 读完这篇文章后: http://www.manuel-schoebel.com/blog/meteorjs-package-only-app-structure-with-mediator-pattern 我还有更多问题。这是正确的做法吗?如果是这样 - 逻辑到底在包中的哪里?
如果有人知道如何解决这个问题,请分享您的想法。
谢谢。
最佳答案
Splitting your code into packages从长远来看,这是一个有返回的策略。您不需要发布包 - 您可以将它们保留在存储库中的 packages
目录下。
关于javascript - 在meteorJs应用程序中,复杂的逻辑应该放在哪里?如何进行应用程序的设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27375813/