2014-11-06 24 views
0

我设计,我们必须在每一个蒙戈文件执行相同的计算一个巨大的应用程序,例如:在Mongoose或MongoDB中将计算和公式放在哪里?

{ 
    field1:field1, 
    field2:field2 
    sum:(field1+field2) 
} 

如果把这类计算最好的?进入Mongoose Model或Schema,MongoDB本身甚至是成角度的我们的控制器?

回答

0

如果您需要对数据执行查询或计算复杂,则为结果添加一个简单的字段并将其存储在MongoDB文档中是有意义的。 MongoDB并不知道某些字段是相关的,这是您保持数据同步的工作。

如果您不需要查询并且计算不复杂,最好的地方通常是模型,因为它允许“后端”服务和前端服务查询字段并且(域)逻辑被编码进入模型的中心位置,而不是分布在一半的代码基础上。

我只把这样的逻辑在前端,如果它是一个只读和前端专用的事情,比如,你可能想通过角过滤进行数字格式,并具有完全执行计算和数据存储精确。

角度控制器应该只涉及前端逻辑,例如,管理用户如何从互相排斥或相互依赖的各种选项中进行选择的顺序。前端控制器不应该对域逻辑有丝毫的想法。

+0

感谢您的回复。 “域逻辑”是什么意思?我同意你的意见,我正在考虑将财务计算保存到Mongo中并让模型使用它。此外,用户将能够从前端更改这些计算公式。我知道,不是你的日常应用程序。 – nottinhill 2014-11-06 13:31:10

+1

“域逻辑”是即使没有计算机也需要执行的逻辑,例如“总量是净乘以1加100以上的税”。所以函数'getGross(){return net *(1 + tax/100.0); }'是域逻辑,领域模型方法是它不应该坐在控制器,数据库或前端,而是模型本身。或者,您可以使用执行计算的'TaxCaluclationService'并输出一个只包含两个字段的总数和净值的dto,但不知道它们是相关的。请参阅http://martinfowler.com/eaaCatalog/domainModel.html – mnemosyn 2014-11-06 14:03:51

+0

谢谢@mnemosyn。我同意它应该在模型中或者在API中,如果模型中不可能的话。另请参阅此后续主题,获取更多技术信息:https://groups.google.com/forum/#!topic/mongoose-users/lzyjg0b8Vn0 – nottinhill 2014-11-06 14:28:23