业务逻辑详解

不同的项目有不同的功能,不同的功能需要不同的实现,实现这些核心功能的代码就叫业务逻辑
比如让你实现一个功能,给你两个数,让你获取它的和,你所写的如何才能获得任意给定的两个数的和,这个程序实现过程即可成为业务逻辑处理。

“一个人了解的业务逻辑越多越细,他就是越好的需求分析师。”

难题:什么是业务逻辑?

业务是指一个实体单元向另一个实体单元提供的服务。
逻辑是指根据已有的信息推出合理的结论的规律。

业务逻辑是指一个实体单元为了向另一个实体单元提供服务,应该具备的规则与流程。

就像你家的规矩–“吃饭前必须洗手”“有客人来要起立”“睡觉前各自说晚安”-就是业务逻辑的生活化实例。

在软件系统架构中,软件一般分为三个层次:表示层、业务逻辑层和数据访问层:

  • 表示层:负责界面和交互;
  • 业务逻辑层:负责定义业务逻辑(规则、工作流、数据完整性等),接收来自表示层的数据请求,逻辑判断后,向数据访问层提交请求,并传递数据访问结果,业务逻辑层实际上是一个中间件,起着承上启下的重要作用;
  • 数据访问层:负责数据读取。

业务逻辑的内容包括四个部分:

  • 领域实体:定义了业务中的对象,对象有属性和行为;
  • 业务规则:定义了需要完成一个动作,必须满足的条件;
  • 数据完整性:某些数据不可少;
  • 工作流:定义了领域实体之间的交互关系。

以大毛网购裤子为例

  • 领域实体:大毛、资金账户、订单、裤子、发货单
  • 业务规则:大毛点击购买就会生成订单,但必须付了钱,才会发货,生成发货单。
  • 数据完整性:淘宝网下订单必须登录账号,没有账号就不能成功购买。
  • 工作流:搜索裤子-找到合意裤子-下单购买-付账-收货。

业务逻辑:搜索“裤子”-找到合意裤子-下单-必须登录账号-结算-付账-收货。

当当必须登录账号才能下单成功,亚马逊就不需要,今天发现淘宝也不需要登录账号就能购买商品了,所以每个网站的规则的不同,就形成了不同的业务逻辑,业务逻辑不仅仅包括规则,还包括实体、数据完整性、工作流。如图:

业务逻辑图

业务逻辑也需要画图,叫做业务逻辑图,它跟业务流程图有什么区别呢?
业务流(工作流)是业务逻辑的一部分,它定义了对象之间的交互关系,但不涉及到规则的制定,数据的完整性方面。
其实,我们平常画的业务流程图多数是业务逻辑图。

所谓的三层开发就是将系统的整个业务应用划分为表示层,业务逻辑层和数据访问层,这样有利于系统的开发、维护、部署和扩展

分层是为了实现“高内聚,低耦合”。采用“分而治之”的思想,把问题划分开来各个解决,易于控制,延展

和分配资源。

所谓的三层开发就是将系统的整个业务应用划分为表示层,业务逻辑层和数据访问层,这样有利于系统的开发、维护、部署和扩展。

分层是为了实现“高内聚,低耦合”。采用“分而治之”的思想,把问题划分开来各个解决,易于控制,延展和分配资源。

业务逻辑层负责系统领域业务的处理,负责逻辑性数据的生成、处理及转换。对所输入的逻辑性数据的正确性及有效性负责,但对输出的逻辑性数 据及用户性数据的正确性不负责,对数据的呈现样式不负责。

JavaEE三层架构MVC,把视图控制器模型分开来

那么在这里业务逻辑就是M。

但是什么样的算是业务逻辑如:上传一个文件,上传代码算是一个业务逻辑吗?

数据库操作增加时需要判断,和一些其它这算业务逻辑吗?(我觉得算)

但是hibernate又提供了一个离线查询对象(DetachedCriter),提供这个接口的意思我想是在外面处理业务逻辑。

但是三层架构不是独立的吗?互相不干涉吗?在service层出现sql,hql,criter不是又把dao与service连在一起了吗?

DTO(VO),POJO,BO这些是什么,POJO对应数据库,BO对应业务逻辑,DTO对应页面的传输与显示。

业务逻辑就是处理数据的逻辑啦。一般后台代码也分三层 action(controller) service DAO (这里的三层不是MVC)

比如 我得到用户名 但是在存入数据库的时候 用户名字段应该是前台的用户名加上当前日期拼成的字符串

action或者controller层是第一层 一般是用来及接受数据并且做数据的非空啊 格式是否正确的验证

如用户名是否为空 是不是安全字符串之类的

service层一般是用来做一个业务逻辑的实现

这时候 userName = userName + new Date();

DAO层 就是与数据库交互层啦

也就是读写数据库 将逻辑层得到的新的userName插入到数据库

MVC和三层架构并没有可比性三层架构是指将程序分为数据访问、业务处理、界面三个层次,是软甲整体架构MVC是仅仅是界面架构,也就是它其实只是三层架构的界面部分,M是指实体模型或者实体模型的一个代理,而非领域模型,C是指控制器,仅仅是做转向,不应该包含任何业务逻辑,V就是视图了。至于那些个什么什么O,都是实体在不同层的映射。另外值得一提的是,MVC在一些小的程序中也经常被当做软件整体架构,那个时候M往往就是实体模型了,但是这种时候,V就对M产生了直接引用,也就是界面对实体产生依赖,这是很不好的(但小程序问题不大),此时可以尝试使用MVP模式解耦。至于业务,看你怎么定义领域模型了,一般像上传文件这种操作并不会牵扯企业的业务,那就不应该当做一个业务,但如果这个上传是在工作流或者一些特殊处理中,则有可能上升到业务。怎么做,要看具体问题。

原文地址:https://www.cnblogs.com/kaisadadi/p/9265196.html

时间: 2024-10-08 12:33:49

业务逻辑详解的相关文章

在线客服 视频呼叫业务逻辑详解

视频呼叫业务逻辑主要实现两个终端(PC.手机.Pad等)之间的通话请求流程控制,包括请求(Request).回复(Reply).开始(Start)以及结束(Finish)等过程,可以形象理解为打电话的流程:拨号.等待.通话.挂断. 以下以Chat视频呼叫业务逻辑为例说明: 1.业务逻辑流程图 请参考 http://bbs.anychat.cn/forum.php?mod=viewthread&tid=150&extra=page%3D1 2.API接口及常量定义 客户端相关API接口及事件

即时通讯技术 好友列表业务逻辑详解

在IM通讯中,通常需要管理自己的小伙伴,经常联系的,重要的用户需要标识在同一用户列表里,方便自己快速联系以及查看好友动态.那么如何可以做到类似QQ的好友列表功能呢,如 大厅好友解决方案包括: 1.业务服务器可以设置用户的好友列表,客户端可以获得好友列表,不需要进入房间: 2.客户端可以获得好友上线.下线的状态通知: 3.业务服务器可以自定义设置用户的任意属性(如名称.签名.性别.备注等)并能同步到客户端,客户端可以获取业务服务器自定义的用户属性: 下面以一款在市面上功能强大的SDK为例做功能实现

即时通讯 好友列表业务逻辑详解

在IM通讯中,通常需要管理自己的小伙伴,经常联系的,重要的用户需要标识在同一用户列表里,方便自己快速联系以及查看好友动态.那么如何可以做到类似QQ的好友列表功能呢,如 大厅好友解决方案包括: 1.业务服务器可以设置用户的好友列表,客户端可以获得好友列表,不需要进入房间: 2.客户端可以获得好友上线.下线的状态通知: 3.业务服务器可以自定义设置用户的任意属性(如名称.签名.性别.备注等)并能同步到客户端,客户端可以获取业务服务器自定义的用户属性: 下面以一款在市面(佰锐上科技)功能强大的SDK为

购物车实现逻辑【详解】

购物车实现逻辑详解 想要实现这样的效果: 1.首先要定义其模型 2.分析页面操作 3.实现其功能函数(在fun包下新建) Cart.java /** * 购物车 * @author Administrator * */ Public class Cart { private int totalCount ; //购书数量 private float totalPrice ; //购书总价 private Map<Integer, CartItem> map= new HashMap<&g

Shiro 登录认证源码详解

Shiro 登录认证源码详解 Apache Shiro 是一个强大且灵活的 Java 开源安全框架,拥有登录认证.授权管理.企业级会话管理和加密等功能,相比 Spring Security 来说要更加的简单. 本文主要介绍 Shiro 的登录认证(Authentication)功能,主要从 Shiro 设计的角度去看这个登录认证的过程. 一.Shiro 总览 首先,我们思考整个认证过程的业务逻辑: 获取用户输入的用户名,密码: 从服务器数据源中获取相应的用户名和密码: 判断密码是否匹配,决定是否

JavaScript逻辑and运算符详解

一.AND详解: 在JavaScript中,逻辑 AND 运算符用双和号(&&)表示. 需要说明的是:逻辑AND运算的运算数可以是任何类型的,不止是Boolean值,如果某个运算数不是原始的Boolean型值,逻辑AND运算并不一定返回Boolean值. 逻辑AND运算符的运算行为如下: 如果一个运算数是对象,另一个是 Boolean 值,返回该对象. 如果两个运算数都是对象,返回第二个对象. 如果某个运算数是 null,返回 null. 如果某个运算数是 NaN,返回 NaN. 如果某个

Linux LVM逻辑卷配置过程详解

Linux LVM逻辑卷配置过程详解 许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份.删除相关数据,甚至被迫重新规划分区并重装操作系统,以满足应用系统的需要. LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上.文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性.RHEL5默认安装的分区格式就是LVM逻辑卷的格式,需要注意的是/boot分区不能基于LVM创建,必须独立出

逻辑卷LVM 应用之详解! VG LV用法 !

一.逻辑卷是什么? 1.lvm:全称logical volume manager,即逻辑卷管理器. 2.那么lv即逻辑卷究竟是什么? 个人认为:逻辑卷就是把一个或多个物理磁盘设备组织为一个由相同大小的存储单元                  PE构成的逻辑卷组VG之后,从次卷组上划分若干存储单元PE构成的一个逻              辑卷LV,因此LV是相对于VG而存在的,它的存在相当于从VG这个大的逻辑                  磁盘上分出去的一个分区,仅此而已.因此,逻辑卷LV

Linux逻辑卷管理LVM2详解

一. 前言LVM是逻辑卷管理(Logical Volume Manager)的简称,它是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性.LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,与硬件相关的存储设置被其隐藏,你可以不用停止应用或卸载文件系统来调整卷大小或数据迁移.这样可以减少操作成本.LVM与直接使用物理存储相比,有以下优点:1. 灵活的容量.当使用逻辑卷时,文件系统可以扩展到多个磁盘上,你可以聚合多个磁盘或磁盘