【问题标题】:Where should calculations be done in a MEAN stack app在 MEAN 堆栈应用程序中应该在哪里进行计算
【发布时间】:2022-01-01 12:18:12
【问题描述】:

我正在为我的投资组合项目建立一个电子商务网站,我想知道应该在哪里为购物车进行计算。

通常我使用 react 并创建一个模型文件夹、路由文件夹和一个控制器文件夹,但我学习 Angular 的方式似乎服务的行为类似于路由,并且对数据库的实际调用是在节点服务器文件中完成的我确信我可以将其分成一个单独的控制器文件。我的问题是在将订单发送到数据库之前应该在哪里完成购物车的计算?我考虑过在下订单之前在购物车组件中执行此操作,还是应该在服务或控制器的后端中完成?我只是想弄清楚标准是什么

【问题讨论】:

  • 两者都有。你例如计算客户端中购物车的总数(这不允许调用服务器显示总数),但您需要在付款前再次计算服务器中购物车的总数(因此避免您收到的数据不同或损坏)

标签: node.js angular


【解决方案1】:

在编写 Angular 应用程序时,我认为遵循以下原则很重要:

组件 - 应该只负责简单的视图逻辑,不应该与服务器联系,也不应该执行与视图无关的复杂计算和/或逻辑。

服务 - 应该对(可重用/共享)和复杂逻辑负单一责任,进行出站通信并与服务器联系,并充当数据存储(使用 BehaviorSubjects)。

因此,如果需要您的计算来更新购物车的视图,我会投票认为这些计算需要在组件中进行。如果您的计算需要更新项目或发送到服务器的请求,则需要在服务中进行。

请记住,组件“不应该知道”数据是如何到达它的,或者它是如何被操纵或发送到服务器的。组件应该只知道,给定任何数据——如何在视图中呈现它,而不应该“担心”这些数据是如何到达它的。类似地,组件在发送到服务器之前不应该知道数据是如何计算的,这属于使用和处理购物车数据并构建对服务器的请求的服务的责任。

但是,您必须始终考虑应用的安全性,以及客户端的恶意数据修改是否会影响您的购物车。如果此类计算影响应用程序的安全性 - 如果未完全委托给服务器,则至少应在服务器上对其进行验证。

【讨论】:

    【解决方案2】:

    我不知道您确切需要的计算,但由于它是一个电子商务网站,我假设它是简单的数学运算,例如结帐的总付款金额。

    服务器的主要作用是与数据库通信。如果任务不涉及与数据交互,您可以在客户端进行计算。将详细信息留在客户端可以让您访问公式的详细信息,并减少客户端和服务器之间的通信时间。

    【讨论】:

      猜你喜欢
      • 2015-06-12
      • 2019-11-24
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 2010-09-19
      • 2017-03-18
      • 2021-02-25
      相关资源
      最近更新 更多