如何避免在客户端和服务器之间重复业务逻辑?

罗兰

随着Web应用程序需求的增长,我发现自己编写了越来越多的API驱动的Web应用程序。我使用AngularJS之类的框架来构建与这些API通信的富Web客户端。目前,我在服务器端/ API中使用PHP(Lumen或Laravel)。

问题是,我发现自己经常在客户端和服务器端之间重复业务逻辑。

当我说业务逻辑时,我指的是类似以下规则的订单:

  • 如果您购买Y,则可以购买X。
  • 如果您有Z,则无法购买Y。
  • 如果您购买其中的10个,则可享受10%的折扣。
  • 高x宽​​x深x成本=最终成本。
  • 如果宽度大于5,则高度必须在10到20之间。

为了使该应用程序既快速响应又快速,在客户端进行了计算逻辑(以及其他业务逻辑)。由于我们不应该信任客户端,因此我在服务器端重新验证了这些数字。这种逻辑可能变得非常复杂,并且在两个地方编写这种复杂的逻辑都非常危险。

我想到了三种解决方案:

  1. 使所有需要业务逻辑的内容都对API进行ajax调用。所有业务逻辑都将存在于一个地方,并且只能进行一次测试。这可能很慢,因为客户必须等待他们对定单进行的每项更改才能获取更新的值和结果。拥有非常快速的API可以帮助您解决此问题。主要缺点是,当用户的连接不良(移动设备)时,这可能无法正常工作。

  2. 在客户端和服务器端编写业务逻辑。客户在对表单进行更改时会立即获得反馈,并且一旦他们在服务器上提交,我们就会验证所有数据。这里的缺点是我们必须复制所有业务逻辑,并测试双方。这肯定是更多的工作,并且会使将来的工作变得脆弱。

  3. 信任客户!!!在客户端编写所有业务逻辑,并假设它们没有篡改数据。在我当前的情况下,我正在开发一个报价构建器,该报价构建器将始终受到人工审核,因此,实际上这是可以的。

老实说,我对任何解决方案都不满意,这就是为什么我向社区寻求建议的原因。我很想听听您对这个问题的看法或解决方法!

帕莎·萨拉蒂·戈什(Partha Sarathi Ghosh)

您可以再做一件事。

仅使用JavaScript创建验证和业务逻辑代码。但要使其尽可能松散地耦合。如果可能,仅将JSON作为输入,并将JSON作为输出。

然后,在现有的PHP服务器旁边设置一个单独的NodeJS服务器,以将该逻辑提供给客户端,这样就可以在客户端使用它而无需AJAX调用。

然后,在PHP服务器上,当您需要验证和运行所有这些业务逻辑规则时,请使用cURL调用NodeJS业务逻辑并验证数据。这意味着从PHP服务器到NodeJS服务器的HTTP调用。NodeJS服务器将具有其他代码,这些代码将获取数据,使用相同的代码进行验证并返回结果。

通过这种方式,您可以

  1. 更快的开发-一种对逻辑进行单元测试的地方。
  2. 更快的客户端代码执行-无需AJAX,因为NodeJS将相同的验证JavaScript代码提供给您的客户端。
  3. 所有业务逻辑都存在于NodeJS服务器中-当业务逻辑发生变化时,您只需要触摸此部分即可;因此,在不久的将来,如果您需要创建其他一些接口,则可以使用此服务器来验证数据。它将像您的业务规则服务器一样工作。

您唯一需要做的就是在PHP服务器旁边设置一个NodeJS服务器但是您无需更改所有代码即可在NodeJS服务器上运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在客户端和服务器之间共享Javascript业务规则?

来自分类Dev

客户端和服务器之间的共享模型

来自分类Dev

客户端和服务器之间的共享模型

来自分类Dev

如何在客户端和服务器之间同步大型列表

来自分类Dev

如何在客户端和服务器之间安全地共享密码?

来自分类Dev

如何在客户端和服务器之间的.c编程中建立sip会话

来自分类Dev

如何在客户端和服务器之间传输语音?

来自分类Dev

如何使apache Camel成为WS客户端和服务器之间的桥梁?

来自分类Dev

客户端和服务器之间的ssh:服务器如何解密客户端发送给它的数据?

来自分类Dev

客户端和服务器端渲染之间的区别

来自分类Dev

客户端和服务器端javascript中“ this”的值之间的差异

来自分类Dev

客户端和服务器端(GWT)之间的日期更改

来自分类Dev

如何在Express,React,Webpack,SSR应用程序中的客户端和服务器之间共享常量

来自分类Dev

如何正确处理 Node.js gRPC 客户端和服务器之间的回调

来自分类Dev

如何为SPI编写客户端代理,客户端和服务器代理之间有什么区别?

来自分类Dev

客户端和服务器流星之间的共享集合

来自分类Dev

在客户端和服务器之间共享TypeScript类

来自分类Dev

Windows Azure:客户端和服务器之间的安全绑定不匹配

来自分类Dev

客户端和服务器之间的同步和异步数据传输

来自分类Dev

DJANGO中的REST / JSON通信...在客户端(Linux)和服务器(Django)之间

来自分类Dev

Git客户端和服务器版本之间的对应关系

来自分类Dev

流星中客户端和服务器上的ObjectId之间的区别

来自分类Dev

流星在客户端和服务器之间共享会话数据

来自分类Dev

客户端API和服务器API之间的区别

来自分类Dev

Go中客户端和服务器之间的通信

来自分类Dev

在客户端和服务器之间发送字符串时出错

来自分类Dev

使用flask在客户端和服务器之间传递信息

来自分类Dev

为什么本地主机上的客户端和服务器之间存在时差

来自分类Dev

测试客户端和服务器之间连接质量的最佳方法

Related 相关文章

  1. 1

    如何在客户端和服务器之间共享Javascript业务规则?

  2. 2

    客户端和服务器之间的共享模型

  3. 3

    客户端和服务器之间的共享模型

  4. 4

    如何在客户端和服务器之间同步大型列表

  5. 5

    如何在客户端和服务器之间安全地共享密码?

  6. 6

    如何在客户端和服务器之间的.c编程中建立sip会话

  7. 7

    如何在客户端和服务器之间传输语音?

  8. 8

    如何使apache Camel成为WS客户端和服务器之间的桥梁?

  9. 9

    客户端和服务器之间的ssh:服务器如何解密客户端发送给它的数据?

  10. 10

    客户端和服务器端渲染之间的区别

  11. 11

    客户端和服务器端javascript中“ this”的值之间的差异

  12. 12

    客户端和服务器端(GWT)之间的日期更改

  13. 13

    如何在Express,React,Webpack,SSR应用程序中的客户端和服务器之间共享常量

  14. 14

    如何正确处理 Node.js gRPC 客户端和服务器之间的回调

  15. 15

    如何为SPI编写客户端代理,客户端和服务器代理之间有什么区别?

  16. 16

    客户端和服务器流星之间的共享集合

  17. 17

    在客户端和服务器之间共享TypeScript类

  18. 18

    Windows Azure:客户端和服务器之间的安全绑定不匹配

  19. 19

    客户端和服务器之间的同步和异步数据传输

  20. 20

    DJANGO中的REST / JSON通信...在客户端(Linux)和服务器(Django)之间

  21. 21

    Git客户端和服务器版本之间的对应关系

  22. 22

    流星中客户端和服务器上的ObjectId之间的区别

  23. 23

    流星在客户端和服务器之间共享会话数据

  24. 24

    客户端API和服务器API之间的区别

  25. 25

    Go中客户端和服务器之间的通信

  26. 26

    在客户端和服务器之间发送字符串时出错

  27. 27

    使用flask在客户端和服务器之间传递信息

  28. 28

    为什么本地主机上的客户端和服务器之间存在时差

  29. 29

    测试客户端和服务器之间连接质量的最佳方法

热门标签

归档