【问题标题】:Presentation logic or business logic?表示逻辑还是业务逻辑?
【发布时间】:2017-09-28 19:42:51
【问题描述】:

假设我的 html 页面中有三个按钮。第一个按钮用于选择汽车,第二个按钮用于租用汽车,下一个按钮用于支付租金。所有三个按钮都发出 ajax 请求以在服务器中执行一些业务逻辑。当用户按下第一个按钮并且 ajax 请求正常时,我启用第二个按钮并禁用第一个按钮,第二个和第三个按钮也是如此。默认情况下,所有按钮都被禁用。如果 ajax 请求正常,则此启用或禁用在 javascript 中。我认为启用或禁用按钮或权限是业务逻辑,不应该出现在视图中,而应该出现在服务器中。我的意思是,根据用户已经做过的操作,发出ajax请求来获取用户的权限不是更好吗?

非常感谢

【问题讨论】:

    标签: view business-logic


    【解决方案1】:

    我有两个答案:

    • 使用 ajax 请求来获取可用的状态转换是完全合理的。你谈论这个好像它是权限,但这不是真的。权限是根据用户被允许执行的操作而在用户之间有所不同的状态。这是基于业务规则在特定状态下有效的操作,这是有请求获取的好东西。

    • 也就是说,当您使用 AJAX 时,通常在客户端和服务器上都有 MVC 模式。也就是说,除了视图逻辑之外,您的 HTML 页面中还有一些视图和控制器逻辑。这个逻辑实现了一些业务规则。 Angular 和其他客户端框架使这样的模式变得明确。在这样的应用程序中,服务器视图层很薄。确保在您的服务器中强制执行重要的业务规则仍然很重要,这样攻击者就无法在客户端上破坏这些规则。在这样的应用程序中,在客户端启用按钮是完全合理的,只要服务器确保您在没有选择汽车的情况下没有租车或付款。

    【讨论】:

      【解决方案2】:

      如果您希望服务器端代码决定是否显示下一个按钮,您可以执行以下操作:

      $.get("/api/yourController/yourMethod")
          .success(function (response) {
              if (response == true){ //change this for your unique decision logic
                  // execute show button code
              }
          });
      

      根据您在response 对象中从服务器返回的数据,您可以控制下一个按钮是否出现在 HTML 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-03
        • 2011-09-07
        • 1970-01-01
        • 2011-07-03
        • 1970-01-01
        相关资源
        最近更新 更多