有关Mongoose的业务逻辑实现的问题
发布于 10 年前 作者 mmbjt 3658 次浏览 最后一次编辑是 8 年前 来自 问答

我想使用mongoose,但我不知道业务逻辑的代码是不是该写在schema的方法里,请大神指点一二。 例如:有一个网购系统,有一个schema:Order。 我现在想实现统计销售额,即是:把所有orders的金额加起来。那么我这个统计销售额的方法是另起一个对象,还是在是Order这个schema里增加方法呢? 我想知道最佳实践是怎么样的?希望有大神无视什么提问的智慧,来指点一下我这个菜鸟,不胜感激! 就没有人出来逼一下嘛?!

5 回复

在 schema 里面做就好了。mongoose 有提供这方面的支持,即帮 model 加上方法。

同意1楼tang哥。具体实现起来,可以是数据读出来之后用Nodejs算,或者直接用MongoDB的aggregation。

首先要谢谢@alsotang。 这两天我下载了cnode的源码,并分析了部分代码,发现models里都没有业务逻辑的代码,而是将该部分代码放在了proxy里(我也不知道这里面的代码算是业务逻辑代码不。。。,这里面全是有关增、删、查、改)。那么现在,假设我有一个Order的schema放在models文件夹下面,有关Order的增删查改操作放在proxy下面(我姑且认为这是业务逻辑),那么现在真正的业务逻辑出现了,即是我需要统计总金额:getTotalPrice()。 问题1:这个方法我应该放在proxy里,然后在controllers的Order.js的某个方法里调用getTotalPrice()?还是在controllers里Order.js文件下的某个方法里直接调用proxy的增删查改方法,然后再计算总和?我自己觉得后者做法不好,但是放在proxy里,和增删查改这些方法,又有本质的不同。是不是还可以独立出一个层次出来? 问题2:cnode的源码中的controllers里user.js的内容有些多(没有别的意思。。。),例如get_collect_topics()。这个这些代码是不是可以抽取出来,放在一个层次里(问题1中独立的层次)?或者说问题1里,把计算总额放在controllers里也未尝不可? 再次感谢@alsotang

问题1 这个方法应该放在 model 的 order.js 里。nodeclub 源码的 proxy 层在我看来是多余的,只是由于历史原因就一直留了下来。这个方法无论如何不应该放在 controller 里 问题2 文件大小并不决定代码好坏。。。如果一个controller就是有很多方法的话,就让它存在就好了。。

好的,谢了!@alsotang

回到顶部