问题是,我经常发现自己在客户端和服务器端之间重复业务逻辑。
当我说业务逻辑时,我的意思是针对订单表单等规则,例如:
- 如果您购买了Y,您可以购买X。 - 如果您有Z,您不能购买Y。 - 如果您购买10个,您可以获得10%的折扣。 - 高度×宽度×深度×成本=最终成本。 - 如果宽度大于5,则高度必须在10到20之间。 - 等等。
为了使此应用程序既响应迅速又快速,计算逻辑(以及其他业务逻辑)正在客户端上进行。由于我们不应该信任客户端,因此我会在服务器端重新验证这些数字。这种逻辑可能会变得非常复杂,并且在两个位置编写此复杂的逻辑会感觉很危险。
我有三种解决方案:
1. 使需要业务逻辑的所有内容都向API发出AJAX调用。所有业务逻辑都将在一个地方中运行,并且只需测试一次。这可能会很慢,因为客户端必须等待每个订单表单更改以获取更新的值和结果。拥有非常快速的API将有助于解决此问题。主要的缺点是当用户网络连接差(例如移动设备)时,这种方法可能无法良好工作。
2. 在客户端和服务器端上编写业务逻辑。客户端可以即时获得反馈并对表单进行更改,我们可以在提交到服务器时验证所有数据。这里的缺点是我们必须复制所有业务逻辑并测试两个方面。这肯定需要更多的工作,未来的任务会变得不稳定。
3.
相信客户端!?!在客户端编写所有业务逻辑并假设他们没有篡改数据。在我的当前场景中,我正在开发一个报价生成器,该生成器将始终由人工审核,因此这可能是可以接受的。
说实话,我对任何解决方案都不太满意,这就是为什么我向社区寻求建议的原因。我很想听听您对这个问题的看法或方法!