Business logic

业务逻辑

From Wikipedia, the free encyclopedia

来自Wikipedia,自由的百科全书

In computer software, business logic or domain logic is the part of the program that encodes the real-world business rules that determine how data can be created, displayed, stored, and changed. It is contrasted with the remainder of the software which might be concerned with lower-level details of managing a database or displaying the user interface, system infrastructure, or generally connecting various parts of the program.

在电脑软件中,业务逻辑或者领域逻辑是指程序的一部分:它对真实世界中的业务规则进行编码,来限定怎样对数据进行创建、显示、保存和修改。与之相对的,软件的其他部分可能关心的是数据库的管理细节、显示用户界面、系统基础架构,或者如何把系统的不同部分连接起来。

Details and example

详情和范例

Business logic:

业务逻辑是指:

  • Prescribes how business objects interact with one another
  • 规定业务对象如何与另一个交互
  • Enforces the routes and the methods by which business objects are accessed and updated
  • 通过要被访问和更改的业务对象来指定路由和方法

Business rules:

业务规则是指:

  • Model real-life business objects (such as accounts, loan, itineraries, and inventories)
  • 对现实世界中的业务对象进行建模(比如账号、贷款、行程、库存等)

Business logic comprises:[1]
业务逻辑包括:

  • Workflows that are the ordered tasks of passing documents or data from one participant (a person or a software system) to another.
  • 工作流,即一系列任务,它们把文档或数据从一个参与者(可以是人,也可以是软件系统)传递到另一个参与者。

Business logic should be distinguished from business rules. [2]Business logic is that portion of an enterprise system that determines how data is transformed or calculated, and how it is routed to people or software (=workflow). Business rules are formal expressions of business policy. Anything that is a process or procedure is business logic, and anything that is not a process nor a procedure is a business rule. Welcoming a new visitor is a process (workflow) consisting of steps to be taken, whereas saying every new visitor must be welcomed is a business rule. Further, business logic is procedural whereas business rules are declarative. [3]

业务逻辑不同于业务规则。业务逻辑是一个企业系统的一部分,它决定数据如何被转换或计算,以及如何被传递给人或软件系统(等价于workflow)。业务规则则是业务策略的一组公式化表达式。所有处理或过程叫做业务逻辑,既非处理又非过程的叫做业务规则。欢迎新的访问者是一个过程(工作流),它由一系列步骤组成,反之,“必须让每个新的访问者都感到受欢迎”,这是业务规则。更明确的说:业务逻辑是过程性的,而业务规则是描述性的。

For example, an e-commerce website might allow visitors to add items to a shopping cart, specify a shipping address, and supply payment information. The business logic of the website might include workflow such as:

比如一个电子商务网站可能允许访问者把东西添加到购物车中,指定一个发货地址,以及提供付款信息。这个网站的业务逻辑可能包括下列工作流:

  • The sequence of events that happens during checkout, for example a multi-page form which first asks for the shipping address, then for the billing address, next page will contain the payment method, and last page will show congratulations.
  • 在结账期间,下列事件序列将依次发生:比如,一个多页面表单首先会问用户发货地址,然后问账单地址,下一个页面将包括支付方式,最后的页面将显示“恭喜购物成功”的信息。

There will be also business rules of the website:

这个网站也包括了一系列业务规则:

  • Adding an item more than once from the item description page increments the quantity for that item.
  • 从物品描述页多次添加同一个物品,将增加这个物品的购买数量。
  • Specific formats that the visitor's address, email address, and credit card information must follow.
  • 访问者地址、邮件地址和信用卡信息必须按指定的格式填写。
  • A specific communication protocol for talking to the credit card network
  • 和信用卡网络“对话”时必须使用特定的通讯协议。

The web site software also contains other code which is not considered part of business logic nor business rules:

这个网站软件还包括其他代码,它们不属于业务逻辑或业务规则的一部分:

  • Peripheral content not related to the core business data, such as the HTML that defines the colors, appearance, background image, and navigational structure of the site
  • 与核心业务数据无关的次要内容,比如用于定义颜色、外观、背景图和网站导航结构的HTML
  • Generic error-handling code (e.g. which displays the HTTP Error Code 500 page)
  • 通用的错误处理代码(比如显示一个HTTP的500错误)
  • Initialization code that runs when the web server starts up the site, which sets up the system
  • 网站服务器启动期间的初始化代码,它将引导系统
  • Monitoring infrastructure to make sure all the parts of the site are working properly (e.g. the billing system is available)
  • 用于监控的基础设施,用于确保网站的各个部分都在正常工作(比如账单系统有效)
  • Generic code for making network connections, transmitting objects to the database, parsing user input via HTTP POST events, etc.
  • 通用的网络连接代码、对象入库代码、通过HTTP的POST事件来解析用户输入的代码,等等。

Business logic and tiers/layers

业务逻辑和物理层/逻辑层

Business logic in theory occupies the middle tier of a 3-tier architecture.

理论上,业务逻辑是三层架构中“中间层”的职责。

Business logic could be anywhere in a program. For example, given a certain format for an address, a database table could be created which has columns that correspond exactly to the fields specified in the business logic, and type checks added to make sure that no invalid data is added.

业务逻辑可以出现在程序中的任何地方。比如,给出一个指定的地址格式,一个和业务逻辑中指定的字段相一致的数据表可能被创建,并且加入了类型检查来确保加入的数据必然有效。

(This section needs to be verified.)

(下面的部分需要进一步验证。)

Business logic often changes. For example, the set of allowable address formats might change when an online retailer starts shipping products to a new country. Thus it is often seen as desirable to make the code that implements the business logic relatively isolated, or loosely coupled. This makes it more likely that changes to business logic will require a small set of code changes, in only one part of the code. Distant but strongly coupled code also creates more of a risk that the programmer will only make some of the necessary changes and miss part of the system, leading to incorrect operation.[4]

业务逻辑经常改变。比如,如果在线零售商开始支持往一个新的国家发货,那么允许的地址格式就需要改变。能让实现业务逻辑的代码相对独立或者松耦合的方案,通常会看起来比较漂亮。这将使业务逻辑的变化只需要改动少量代码。不够清晰的紧耦合代码将带来风险:程序员将只完成一部分修改,而其他的部分则被忘掉或略过了,这将导致错误的操作。

A multitier architecture formalizes this decoupling by creating a business logic layer which is separate from other tiers or layers, such as the data access layer or service layer. Each layer "knows" only a minimal amount about the code in the other layers - just enough to accomplish necessary tasks. For example, in a model–view–controller paradigm, the controller and view layers, might be made as small as possible, with all the business logic concentrated in the model. In the e-commerce example, the controller determines the sequence of web pages in the checkout sequence, and is also responsible for validating that email, address, and payment information satisfy the business rules (rather than leaving any of that up to the database itself or lower-level database access code).

多层架构通过创建业务逻辑层来把这种解耦工作正式化,它将从其他逻辑层或物理层中分离出去,比如数据访问层或服务层。每一层只“知道”其他层的一小部分代码 —— 只够完成必要的工作。比如,在一个MVC(model-view-controller)范式中,控制器和视图层被设计的尽可能小,所有业务逻辑被包含在model中。在电子商务的例子中,控制器决定结账流程中的页面顺序,并且它也负责规矩业务规则对邮件地址、地址、支付信息进行验证,并给出回应(但是把其他的部分留给数据库本身和数据访问代码)

Alternative paradigms are possible. For example, with relatively simple business entities, a generic view and controller could access database objects which themselves contain all the relevant business logic about what formats they accept and what changes are possible (known as the database model)..

其他的范式也是可以的。比如,具有一个相对简单的业务实体,一个通用的、能自己访问数据对象的视图和控制器,它们包含了所有关于如何格式化所获得的数据以及允许做哪些改变(即数据模型)的业务逻辑……

Some tiered schemes use either a distinct application layer or a service layer, or consider the business logic layer to be the same as one of those.

某些其他的分层方案可能使用一个明确的应用层、服务层,或把它们之一作为业务逻辑层。

Tools and techniques

工具和技术

Business logic can be extracted from procedural code using a business rule management system (BRMS).[5]

业务逻辑可以从过程化代码中通过业务规则管理系统(BRMS)提取出来。

The business rules approach of software development uses BRMSs and enforces a very strong separation of business logic from other code. User interface management systems are another technology used to enforce a strong separation between business logic and other code. The magic pushbutton is considered an "anti-pattern": a technique that in this case creates undesirable constraints which make it difficult to code business logic in an easy-to-maintain way.

使用BRMS系统近似于针对业务规则进行软件开发,并且把业务逻辑和其他代码强力分离开。“用户界面管理系统”是另一种把业务逻辑和其他代码强力分离的技术方案。“魔术推按钮”是一个反模式:在这种情况下,此技术创建了无法让人满意的约束,它无法使用易于维护的方式来编写业务逻辑代码。

A domain model is an abstract representation of the data storage types required by business rules.

领域模型是业务规则中所需的数据存储类型的抽象表示。

翻译:wiki中的business logic词条的更多相关文章

  1. [翻译]PYTHON中如何使用*ARGS和**KWARGS

    [翻译]Python中如何使用*args和**kwargs 函数定义 函数调用 不知道有没有人翻译了,看到了,很短,顺手一翻 原文地址 入口 或者可以叫做,在Python中如何使用可变长参数列表 函数 ...

  2. webstorm快捷键 webstorm keymap内置快捷键英文翻译、中英对照说明

    20160114参考网络上的快捷键,整理自己常用的: 查找/代替shift+shift 快速搜索所有文件,简便ctrl+shift+N 通过文件名快速查找工程内的文件(必记)ctrl+shift+al ...

  3. domain or business logic

    Here are a few of the questions you should ask when writing business logic: ¡Do you fully understand ...

  4. Building Applications with Force.com and VisualForce (DEV401)(五):Application Essential: Introducing Business Logic

    Dev 401-005 Application Essential: Introducing Business Logic Module Agenda1.Custom object Queues2.W ...

  5. 在Elasticsearch中查询Term Vectors词条向量信息

    这篇文章有点深度,可能需要一些Lucene或者全文检索的背景.由于我也很久没有看过Lucene了,有些地方理解的不对还请多多指正. 更多内容还请参考整理的ELK教程 关于Term Vectors 额, ...

  6. [翻译]HTML中不知名的语义标签

    原文:http://docs.webplatform.org/wiki/tutorials/Lesser_-_known_semantic_elements HTML5中比较常用的语义元素有heade ...

  7. 翻译wiki(一):Bios boot partition

    文章翻译自wiki,水平有限,若有错万请见谅.原文:https://en.wikipedia.org/wiki/BIOS_boot_partition BIOS boot partition是一个分区 ...

  8. [翻译]C#中异步方法的性能特点

    翻译自一篇博文,原文:The performance characteristics of async methods in C# 异步系列 剖析C#中的异步方法 扩展C#中的异步方法 C#中异步方法 ...

  9. javaWeb中struts开发——Logic标签

    1.Struts标签的logic标签 Logic标签是逻辑标签,是Struts中比较重要的标签,完成各种逻辑运算操作,可以直接支持全局调转. 2.1<logic:present><l ...

随机推荐

  1. 剑指offer系列39-----矩阵中的路径

    [题目]请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径. * 路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子. * 如果一条路径经 ...

  2. redis客户端jedis连接和spring结合

    摘自传智博客课程 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="htt ...

  3. 去掉IntelliJ IDEA的拼写检查

    Settings→Editor→Inspections→Spelling 去掉Spelling下的Typo复选框即可 来自为知笔记(Wiz)

  4. 网页颜色RGB记法和16进制记法转化方法

    A=>10,B=>11,C=>12,D=>13,E=>14,F=>15 看一个例子: 254,112,85 255/16 等于 15 余 14 那么它对应的应该是F ...

  5. Python类,域,方法,对象,继承

    类和对象: 是面向对象编程的两个主要方面,类创建一个新类型,而对象这个类的实例.. 域: 属于一个对象或类的变量被称为域.域有两种类型: 属于每个实例(类的对象)或属于类本身.它们分别被称为实例变量和 ...

  6. java中用中国网建提供的SMS短信平台发送短信

    接下来的项目需求中提到需要短信发送功能,以前没有做过,因此便在网上搜了一下.大体上说的都是有三种方法,分别是sina提供的webservice接口.短信mao和中国网建提供的SMS短信平台. 这三种方 ...

  7. 【转】 远程到服务器安装visualSVN server,出现Service 'VisualSVN Server' failed to start的解决方法

    在帮助远程到服务器上安装visualSVN server的时候,出现Service 'VisualSVN Server' failed to start. 解决方法(先不要关闭安装弹出的错误窗口): ...

  8. PLSQL_Oracle外部表的概念和使用(案例)

    2014-08-25 Created By BaoXinjian

  9. CE_现金预测详解(案例)

    2014-07-14 Created By BaoXinjian

  10. POJ 3984 迷宫问题(BFS)

    迷宫问题 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, ...