【问题标题】:What is Business Logic?什么是业务逻辑?
【发布时间】:2011-09-07 23:42:43
【问题描述】:

可以用业务逻辑这个词来形容吗:

控制最终用户可以使用哪些数据的帐户角色(管理员、最终用户、未注册用户、版主)?

如果没有,有人可以提供一个术语来描述上述情况,并纠正我的业务逻辑的确切含义吗?它与业务规则有何不同?例子?你会把业务逻辑层放在 Rails/RoR 的 Controller 中吗?

【问题讨论】:

  • 我建议这个问题确实属于 Stack Overflow 的对等站点programmers.stackexchange.com。
  • “逻辑”是一个被过度使用和滥用的词。大多数使用逻辑一词的术语都在描述不完全合乎逻辑的实践或过程。业务不可能是完全逻辑的,因为业务中存在固有程度的混乱,而真正的逻辑会产生可预测的结果,因此“业务逻辑”只不过是一个“流行语”。因此,无论谁使用了“业务逻辑”这个词,都可能是为了吸引大众。

标签: ruby-on-rails ruby model-view-controller business-logic business-rules


【解决方案1】:

基本的想法是让你的控制器尽可能的薄。大多数情况下,这意味着控制器接受来自网络的数据,并在视图中设置所需的变量,然后选择视图。

确定角色、管理员等的过程是向模型提出的问题......可能类似于用户或角色等。如何确定的逻辑在模型中。控制器与此信息协调以选择视图或在不允许时重定向等。

有时我发现自己在一个控制器中,执行复杂的查询以获取特定的记录集。这是一种代码异味,我需要接受该查询并在模型中的某处创建范围或方法。

如果您发现自己在模型上链接了很多调用,则可能是时候将其移至模型了。如果您发现自己要打开大量记录、做出决策并更新记录,那么可能是时候转向模型了。

如果需要决定向用户显示什么视图(或者是否显示它!),控制器就可以了。

【讨论】:

    【解决方案2】:

    对我而言,业务逻辑意味着您需要在 Ruby 中实现的任何特定业务流程。

    例如,如果您有一个供人们购买门票的网站,您可能会有这样的业务流程:“在活动当天,用户只能购买一张门票,之后他最多可以购买 5 张,如果还有票”。所以你必须用 Ruby 写出来——这是实现业务规则的 Ruby 代码。

    相比之下,在同一系统中,您可能有将工单拆分为 PDF 的代码。我不会考虑“业务逻辑”,因为它不是业务工作流程规则……是的,将票据打印为 PDF 具有商业价值,但这与业务流程如何工作(或应该工作)启用的工作流程无关更好地为客户服务。

    只买一张票的规则在哪里?这是该特定业务的政策,业务规则。

    正如@Vinnyq12 指出的那样,您的示例更像是访问控制描述...您可以说这可能是一种业务逻辑,是的。

    【讨论】:

      【解决方案3】:

      您所说的是基于角色的访问控制,它是一种业务逻辑。

      业务逻辑是调用模型时执行的操作。业务逻辑在模型中,而不是控制器中。

      【讨论】:

      • 感谢您的回复。我对放置在模型而不是控制器中的业务逻辑有点困惑。就登录系统而言:当用户看到登录页面并插入他们的凭据时,该信息会从视图传递到控制器。控制器验证并查看模型以确定凭据是否匹配,以及它们具有什么访问级别,然后输出带有数据的视图。控制器验证的部分..这是业务逻辑操作?
      • 控制器在验证什么?除了 null 或未定义的检查外,控制器不应验证任何 IMO。控制器应该将参数传递给模型,以便模型检查对象的有效性。
      • 值得指出:模型中的业务逻辑是 Rails 采用胖/重模型方法的结果。许多其他 MVC 框架具有更简单/笨拙的模型,并且业务逻辑放置在控制器或控制器的委托中。
      • @CarlZulauf 这篇文章已经过去几年了,我的意见是基于 Rails 的。多年来,我的意见变得迟钝,使用任何有效的方法。如果在 Rails 中你在模型中执行它,那么很好。如果在 Node 中你在中间件中执行它,那么也可以。只要把工作做好。
      【解决方案4】:

      业务逻辑是编写应用程序所有控制语句的应用程序层。 例如,您有一个简单的在线售票应用程序。现在,当您正在开发应用程序时,您需要为销售门票实施一些逻辑,例如预订日期不应该是假期。因此,您不会出售假期门票的这条规则只不过是一种商业逻辑。 详情见本站 http://en.wikipedia.org/wiki/Business_logic

      【讨论】:

        猜你喜欢
        • 2011-03-17
        • 2020-09-07
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-21
        相关资源
        最近更新 更多