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

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

#1 楼

CRUD是缩写,代表创建,读取,更新和删除。这些是您可以对数据库元组执行的四个基本操作。但是,业务应用程序除了创建,读取,更新和删除数据库记录外,还有更多的东西。
让我们从一些基本定义开始,然后看几个例子,看看这些定义如何映射到这些例子,以及它们如何映射。映射到实际软件。
业务逻辑或域逻辑是程序的一部分,它编码确定确定如何创建,存储和更改数据的真实业务规则。它规定了业务对象之间如何交互,并规定了访问和更新业务对象的途径和方法。
业务规则描述了适用于组织的操作,定义和约束。这些操作共同构成一个过程;每个企业都使用这些流程来形成完成任务的系统。
现在,让我们来看一些示例。
将钱从一个支票帐户转移到另一个支票帐户
首先,您需要什么?知道(输入)吗?

进行转帐的人的身份
要转帐的金额
源支票帐号
目标支票帐号数字

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

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

“原子性”是指交易必须完全成功或必须完全成功失败。您不能进行以下交易:从一个账户中取出钱而没有到达另一个账户(钱消失),或者将钱存入一个账户,但不从另一个账户中借记(钱神奇地从任何地方出现)。 >从Amazon订购商品。
您需要了解什么?

订购者的身份
发货信息
计费信息
付款方式
要运送的每种物品的数量和数量
如何运送(过夜,慢船或超级救星)
州税率

下订单后会发生什么?


从库存中提取物品


手头上的数量借记


物品被包装用于装运


缺货的项目被补购



低于最低数量的项目被订购


是一两批?


打印发票/运输清单,并与订单一起放置
..etc。



评论


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

–jdv-Jan de Vaan
2014年3月31日17:51

业务逻辑是指代码。业务规则是指业务。

–罗伯特·哈维(Robert Harvey)
2014年3月31日17:52



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

–jdv-Jan de Vaan
2014年3月31日在17:56

@jdv:您想得太多了。柜员会只完成那笔交易的一半吗?

–罗伯特·哈维(Robert Harvey)
2014年3月31日在17:59

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

–bdutta74
2014年4月1日在2:45

#2 楼

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

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

但是,错误跟踪器不仅仅具有CRUD。 br />不允许开发人员标记已验证或已关闭的错误-那就是QA工作的一部分。因此,其中有一些代码可确保没有QA角色的人无法将错误标记为已关闭或已验证。
除项目经理外,其他任何人都无法真正删除错误。
在为了将错误标记为“测试我”,必须针对该错误至少提交一次代码。
只有处于“关闭”状态的错误才可以移至“重新打开”状态
分配给该错误的开发人员无法将其从“代码审查”移至“代码审查完成”。
质量保证,开发人员只能看到分配给他们的项目中的错误。

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

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

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

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


当您开始进入业务规则时,这往往比Crud本身或业务逻辑要高。这往往是您从与业务部门合作的业务分析师那里获得的东西。

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


如果收货时间等于或超过90天,仅在商店中可以提供信用额度
如果收据的使用期限不足90天,则将收据用于购买的标书上的信用额度记入信用额度(信用卡上返还信用卡,现金返还现金,在商店中返还现金)除非有支票,否则请使用现金。

这些是一些业务规则。它们不涉及应用程序的CRUD部分。

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


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

#3 楼

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

业务逻辑是可移植的

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

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

#4 楼

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

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

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

#5 楼

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

#6 楼

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