[架构设计] 什么是业务逻辑

讨论设计时,专业词汇满天飞,每个人的技术背景、工作经验上的不同都会导致在理解上存在着差异。无论是SEI的定义、OMG UML的定义、还有各路大神的定义,都有从不同视角带来的差异。准备后面关注这些不同定义,摊开来大家一起来讨论。

关于’业务逻辑’, 国内国外争论了很多年了(这篇在07年就说没有清晰的定义),其中几个比较详细的讨论见附录(一定要看评论)。我总结主要分为两类: 一类是逻辑处理论,一类是数据操作论。

逻辑处理论

先看前者,这一类观点,核心是强调逻辑。 细说业务逻辑中,作者将业务逻辑分别做了狭义和广义的定义,其中狭义定义如下:

   业务逻辑就是对数据访问操作的简单的封装 (显然就是第二类观点)

而广义的定义如下:  

   软件产品由界面/交互与业务逻辑两部分构成。业务逻辑是软件产品的核心,但不与使用者交互。

后面这个广义的定义好有力度,一刀从界面(含交互)切开,一边展现(界面及交互),另一边就是业务逻辑。不过,这个也与国外一位大牛的定义呼应(What is Business Logic Anyway),大意为:

   一个应用中最为珍贵的核心所在,并不依赖于某个特定应用而存在。

这里面已经是从领域驱动设计的角度来看。界面可以理解为应用的展示层,而业务逻辑是领域模型的核心,代表了应用解决领域问题所应用的流程、公共、算法、决策树、各类方法、查询等。

数据操作论

而数据操作论,特别强调操作数据,以Wiki为代表。先看一下Wiki的定义,略有点中间路线的味道,显然是站在企业应用的角度来定义:

依据现实的业务规则来操作数据。(原文: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.)

还种观点认为需要从”业务"的定义来理解业务逻辑。从需求出发,业务规则(Business Rules)是基本的业务需求,包括业务的管理、运算、以及处理数据等。实现时可以分为应用逻辑(application logic)和领域逻辑(domain logic), 这些都是业务逻辑。其中前者是处理一些非核心逻辑,比如ERP中订单号生成的规则了。后面则是核心的逻辑,比如物料清单转为请购单的处理。

另一个此观点的变形,尝试将业务逻辑与MVC/MVP中的Model关联起来。但实际上MVC/MVP这种本身用于展现(GUI或console)的设计方案在有关业务逻辑的讨论上显得太狭义了。对于一些大型应用而言,MVC/MVP可能仅仅处于其中的展现层。

最后还有一层次上的视角问题。从应用的整体来看,和从单独一个层次的角度来看,所谓的”业务"也是不同的。所以配合广义论,业务逻辑就会变成一个无所不包的概念。那么这个概念本身就变成了内部处理的代名词。业务逻辑这个概念本身起源于企业应用的架构设计,未必能适用于整个软件领域。所以,也有很多工程师从来不谈”业务逻辑”。

总结

曾经有人说过,任何普适的概念,和废话一样。从软件的细节到整体,有着无数不同的视角。顺畅的讨论还是要从确定共同的视角开始。下次再讨论时,如果觉察到关于业务逻辑的理解不同,还是先说清楚,你定义的业务和业务逻辑是什么?

参考:

细说业务逻辑 (uml.org.cn)

What is the heck is business logic anyway?

What’s the difference between application layer and business logic layer? (SO)

什么是业务逻辑 (度娘)

欢迎一起学习、讨论! 

时间: 2024-09-25 12:39:36

[架构设计] 什么是业务逻辑的相关文章

DotNET企业架构应用实践-实例架构设计中的业务分层-提取独立的业务层

      说明一下,原本的思路是通过一步一步教你使用AgileEAS.NET基础类库进行应用开发-系列目录相关的文章来逐步讲解基于AgileEAS.NET平台进行应用开发的文章,但是在进行案例讲解的过程,我们不得不扯到有关于AgileEAS.NET平台进行应用开发的架构设计方面的东西,我就把一些与架构有关的文章分离出来讲,了,我是基于AgileEAS.NET平台的应用开发实例来讲解架构设计,所以本文应该还有个副标题"一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-提取独立

《解剖PetShop》系列之五:PetShop之业务逻辑层设计

业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分.它的关注点主要集中在业务规则的制定.业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,我们也将业务逻辑层称为领域层.例如Martin Fowler在<Patterns of Enterprise Application Architecture>一书中,将整个架构分为三个主要的层:表示层.领域层和数据源层.作为领域驱动设计的先驱Eric Evans

《解剖PetShop》之五:PetShop之业务逻辑层设计_自学过程

五 PetShop之业务逻辑层设计 业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分.它的关注点主要集中在业务规则的制定.业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,我们也将业务逻辑层称为领域层.例如Martin Fowler在<Patterns of Enterprise Application Architecture>一书中,将整个架构分为三个主要的层:表示层.领域层和数据源层.作为领

ENode框架Conference案例分析系列之 - 架构设计

Conference架构概述 先贴一下Conference案例的在线地址,UI因为完全拿了微软的实现,所以都是英文的,以后我有空再改为中文的. Conference后台会议管理:http://www.enode.me/conference Conference前台预定座位:http://www.enode.me/registration ENode论坛开源案例:http://www.enode.me/post ENode开源项目地址:https://github.com/tangxuehua/e

【转】Dubbo架构设计详解

本文转自:Dubbo架构设计详解,原作者是:时延军 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色.关于注册中心.协议支持.服务监控等内容,详见后面描述. 总体架构 Dubbo的总体架构,如图所示: Du

阿里云湖北区域服务商:架构设计包括哪些方面

阿里云湖北区域服务商武汉捷讯技术为企业客户提供互联网分布式系统设计和大数据架构咨询服务. 服务目录: 1.阿里云资源技术选型 通过丰富的经验及配套工具,分析用户IT系统特点及参数,兼顾成本.性能.扩展性等,帮助用户选择正确的云产品以及合适的配置. 2.阿里云产品使用咨询 针对使用较为复杂的阿里云产品向用户提供咨询和指导,例如针对对象存储OSS.大数据计算服务MaxCompute.企业级分布式应用服务EDAS等云产品向用户提供使用咨询及编程指导服务. 3.云上IT架构设计 从应用.数据.网络等多个

架构设计-业务逻辑层简述

    业务逻辑层是专门处理软件业务需求的一层,处于数据库之上,服务层之下,完成一些列对Domain Object的CRUD,作为一组微服务提供给服务层来组织在暴露给表现层,如库存检查,用法合法性检查,订单创建.    业务逻辑层包含领域对象模型,领域实体,业务规则,验证规则,业务流程.1:领域对象模型为系统结构描述,包含实体功能描述,实体之间的关系.领域模型处于天生的复杂性:2:领域实体:业务层是一些操作业务对象(BO)的处理.业务对象包含数据和行为,是一个完整的业务对象.其不同于上节架构设计

ASP.NET 三层架构使用IDAL 接口层有什么作用,有和妙用,使用业务逻辑层BLL直接调用数据层DAL不可以嘛。

问题描述 我们通常是UIweb层调用BLL层,BLL层调用DAL达到数据的交换.但是看到大多数项目是有个IDAL接口,只是声明方法没有任何的代码实现部分,代码实现部分都放在了DAL层,然后BLL层去调用IDAL接口层的方法实现,并没有去调用DAL层,UI层调用BLL层,这里的接口层有和作用,请教各位帮忙解答,不胜感激! 解决方案 解决方案二:IDAL是DAL层的类要实现的接口.DAL层的各类需要完成对数据库的访问,但是不同的数据库需要使用不同的DAL对象,这样对于BLL层来说无法实现数据库无关性

走向ASP.NET架构设计第五章:业务层模式,原则,实践(前篇)

在上一章中,我们讲述了有关业务层分层的一些知识,下面我们就来看看,在具体的业务层的设计中,我们可以采用哪些模式可以将业务层设计的更加的灵活! 架构模式 首先我们就来看看,如何更加有效的组织业务规则. Specification Pattern(需求规格模式) 这个模式的使用方法就是:把业务规则放在业务类的外面,并且封装成为一个个返回boolean值的算法.这些一个个的业务规则的算法不仅仅便于管理和维护,并且还可以被重用,而且很方便的组织成为复杂的业务逻辑. 下面我们就来看一个以在线租DVD的公司