如何决定执行业务逻辑的位置?

时间:2017-06-07 15:14:54

标签: database backend software-design

在我们编写Web应用程序时,我们遇到了有关业务逻辑执行的多个决策。

我们的堆栈包括mongodb数据库和mongoose在我们的nodejs动力后端之上。
我们该如何决定是在后端代码中执行特定计算,还是为数据库构建查询?

简单的例子:我们有一系列车辆。我们想要计算平均座位数 我们应该提取所有数据并在应用程序中计算结果,还是应该为数据库创建查询(聚合)来执行?

优点(在数据库上执行)

  • 在大型馆藏的网络流量方面更快

  • 可能更有效率

缺点

  • 耦合到数据库

  • 更难测试

1 个答案:

答案 0 :(得分:0)

我会在应用程序中构建一个抽象 - 所以像someBusinessLayerClass.getAverageNumberOfSeats()(或者Node中的等价语法)。然后,可以将调用委托给生产系统中的数据库,同时可以对其进行模拟/存根以进行测试。如果要端到端地测试它,请使用集成测试。

在我看来,这个特殊要求归结为查询数据 - 有人可能认为将这一责任赋予数据库是可以的。但是,如果您正在为实际业务规则实施逻辑(假设您需要根据许可类别和事故历史验证特定车辆是否可以租给特定驱动程序),那么它应该存在于业务中逻辑层。