真正的“业务逻辑”是什么?


115

自2009年开始使用PHP以来,我一直从事Web开发。当我搬到ASP.NET时,我听到了很多有关DDD和OOAD的信息,其中很多重点都放在了这种“业务逻辑”和“业务规则”上。关键是,到目前为止,我开发的所有应用程序都与CRUD操作有关,而我在实践中从未见过这些东西。

我简直无法想象这些东西在实践中到底会是什么。那么,这个业务逻辑到底是什么?它如何适合应用程序?我知道这些方法是作为领域模型中的方法实现的,但是这些方法可能是什么,以及它们在应用程序中的可能位置?

Answers:


107

CRUD是首字母缩写词,代表创建,读取,更新和删除。这些是您可以对数据库元组执行的四个基本操作 但是,业务应用程序总是具有比创建,读取,更新和删除数据库记录更多的功能。

让我们从一些基本定义开始,然后看几个示例,看看这些定义如何映射到示例,以及它们如何映射到实际软件。

业务逻辑或域逻辑是程序的一部分,编码确定确定如何创建,存储和更改数据的真实业务规则。它规定了业务对象之间如何交互,并规定了访问和更新业务对象的途径和方法。

业务规则描述了适用于组织的操作,定义和约束。这些操作共同构成一个过程;每个企业都使用这些流程来形成完成任务的系统。

现在,让我们来看一些示例。

从一个支票账户转账到另一个

首先,您需要了解(输入)什么?

  • 进行转移的人的身份
  • 汇款金额
  • 来源检查帐号
  • 目标支票帐号

必须应用哪些“业务规则”?

  • 提出请求的人必须有权这样做。
  • 事务必须是原子的
  • 如果交易金额超过一定金额,则可能需要向政府报告

“原子”是指事务必须完全成功或必须完全失败。您无法进行以下交易:将一笔钱从一个帐户中取出而没有到达另一个帐户(钱消失),或者将钱存入一个帐户,但不从另一笔帐户中借记(钱神奇地从任何地方出现)。

从亚马逊订购商品。

你需要了解什么?

  • 订购人的身份
  • 运输信息
  • 账单信息
  • 支付方式
  • 运送的每件物品的数量和数量
  • 如何运送(过夜,慢船或超级救星)
  • 州税率

下订单后会发生什么?

  • 物品从库存中拉出
  • 现有数量借记
  • 物品包装好后装运
  • 缺货商品已缺货
  • 订购低于最小数量的物品
  • 一两个?
  • 发票/运输清单已打印,并与订单一起放置

    ..等等。


5
我喜欢这些定义,但是在示例中,我想念您在业务逻辑与业务规则之间做出的区分。
jdv-Jan de Vaan 2014年

1
好。但是,为什么将“交易必须是原子的”标记为业务规则?对于业务规则,我听起来有点低级。
jdv-Jan de Vaan 2014年

9
@jdv:您想得太多了。出纳员只执行那笔交易的一半吗?
罗伯特·哈维

1
@jdv:说事务必须是原子的就意味着两件事:(1)如果某件事干扰了事务的处理,则有可能撤消对事务的任何影响,就好像它从未发生过一样(也许,除了创建错误日志报告),或者完成所有需要完成的工作;(2)交易的任何部分都不会与涉及这些帐户的任何其他“原子”交易重叠。例如,如果有人在两个帐户中每个帐户中都有$ 1,000,000的情况下,在向银行提出要求时将500,000美元从一个帐户转移到另一个帐户...
超级猫

4
@jdv事务是原子的,这是一个基本要求,需要确保,并且与最终状态有关。
icarus74

27

CRUD只是应用程序执行的创建,读取,更新,删除操作。

在某种程度上,错误跟踪器也是CRUD应用程序。创建错误,阅读(显示)错误,更新错误,甚至删除它们。

但是,错误跟踪器不仅仅具有CRUD。

  • 开发人员不允许将错误标记为已验证或已关闭-这是QA工作的一部分。因此,其中存在一些代码来确保没有QA角色的人无法将错误标记为已关闭或已验证。
  • 除项目经理外,没有人可以实际删除错误。
  • 为了将一个错误标记为“ test me”,必须针对该错误至少提交一次代码。
  • 只有处于“关闭”状态的错误才可以移至“重新打开”状态
  • 分配给该错误的开发人员无法将其从“代码审查”移至“代码审查完成”
  • 质量检查人员和开发人员只能看到分配给他们的项目的错误。

实现以上内容的代码是应用程序的业务逻辑。

工作流程的限制,或者可以在CRUD中执行各种操作。这些就是将一个CRUD应用程序与另一个CRUD应用程序区分开的原因。它们是您需要使业务实际说明应用程序如何工作的部分。它是多么合乎逻辑...好吧,这是在项目经理的耳边讨论啤酒的最佳方式。但这就是业务逻辑。

当然,有可能在没有角色的情况下编写“纯” CRUD应用程序,可以修改和查看所有内容-但这是例外,而不是规则。

业务逻辑是您要编写到程序中以处理给定业务规则的逻辑。


当您开始涉足业务规则时,这往往处于比原始或业务逻辑更高的级别。这往往是您从与业务部门合作的业务分析师那里获得的东西。

在此示例中,考虑一个确定如何在商店的退货柜台处理商品退货的程序。

  • 如果收据已使用90天或以上,则只能提供店内抵免额
  • 如果收据的使用期限不足90天,则将其用于购买收据的标书记入贷方(贷方退回信用卡,现金返还现金,店内贷方转到店内贷方)...是支票,在这种情况下,请使用现金。

这些是一些业务规则。他们不与应用程序的CRUD部分对话。

使用业务规则时,通常可能会发现它们是用规则引擎(例如Windows Workflow Foundation Rules Engine)编写的,而不是在系统中编写原始代码的。


意识到逻辑/规则的区别是术语之一,并且可以整夜争论不休(最好再喝一杯啤酒)。尽管这不是一个普遍的区别,但是两者可以相互融合。


23

其他答案是正确的。还有一个想法……

业务逻辑可移植

如果要用另一种编程语言重新实现软件项目,比如说从Turbo Pascal迁移到Java那么新旧项目的共同点就是业务逻辑业务规则

编程语言是不同的。所述源代码将是完全不同的。这些工具(IDE编译器等)可能完全不同。该用户界面,可能会完全重新组织或有不同的外观和感觉。该文档可能会有所不同。但是,这两个项目的目的,所完成工作的最终结果/所实现的目标是相同的。


10

业务逻辑基本上包括两大类:验证和流。业务逻辑说,数量1必须大于或等于数量2-例如,要购买的商品数量必须小于或等于库存商品数量。

在一个应用程序中,业务人员会说这是一条业务规则,因此您编写代码以强制执行此业务逻辑(验证)。另一个应用程序会说,如果订购的商品数量大于库存的商品数量,则接受订单,然后下定您自己的订单,收取差额加上20%,因此您将编写此业务逻辑(流程) 。

CRUD只是简单地获取和存储数据并对其进行更改。业务逻辑确定您对数据进行的处理以及对数据进行的转换。您的客户将来是否出生于某个地理区域(年龄在5岁以下)(当地人/游客的折扣)。CRUD很简单,要知道孩子只有在日历年中与您同住超过一半的时间(而不仅仅是六个月以上),您才能获得孩子税收抵免,这更加复杂。


9

业务逻辑或规则是与用户界面机制(“编程材料”)无关的任何事物。如果您进行此交易或100年前(手动)进行任何交易,这些都是您仍然必须应用的东西。例如,何时对购买商品应用营业税。


1

程序或应用程序的“业务逻辑”是代码的一部分,实际上是用输入(来自用户,操作系统等)来执行操作。应用程序的“业务规则”通常是程序本身定义的参数(例如,如何处理输入)。至少,这就是我从许多人那里听到的信息。它们与描述部分代码的术语非常相似。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.