细说软件产品和业务& 业务过程(流程) & 业务逻辑

 

by:授客 QQ1033553122

 

作为一名测试人猿,需要懂产品,不懂产品的测试猿不是好测试猿猴。而业务逻辑是软件产品的支柱,所以,要懂产品,就必须懂业务逻辑。

介绍业务逻辑之前,先介绍下相关的一些概念。

什么叫业务?

从企业的角度来讲,业务是企业运用科学方法和生产工艺生产出可交付用户使用的产品与服务,并以此为企业带来利益的行为。

举例:

对服装企业来说,业务一般是生产服装;对银行企业来说,业务可以是办理贷款;对软件公司来说,业务可以是开发某种类型的软件,比如开发防火墙软件;对医院来说,业务可以是提供医疗服务。

什么叫业务过程?

“业务流程”和“业务过程”是两个经常出现的词,含义相似,但有轻微区别,这里暂且不做区分,都统一叫做业务过程。

1)业务过程开始于客户需求,终止于客户需求的满足,为客户创造价值。

2)业务过程是为了产生产品或服务而设计的一系列步骤,一些过程的结果可能是由组织外的客户所接受的产品或服务,称为主要过程;另一些过程的产出不为外部客户所见,但是有效管理所必须的,称为支持过程。

举例:

业务过程,对于服装工厂来说,可以是产出可穿戴衣物的一系列活动;对医院来说,可以是提供医疗服务的一系列活动;对软件公司来说,可以是开发出满足客户需求的软件产品的一系列活动。

软件产品和业务过程

软件产品具有它的特殊性,通常情况下,企业提供的软件产品、服务,主要用于外部组织、用户实现其业务过程。

举例:

假设有两家公司,A公司和B公司。A公司的业务是提供医疗服务;B公司是开发医疗相关的软件。A公司找到B公司说,我需要你们帮忙开发一个系统,实现XXX功能。这时,B公司考虑的不仅是自己的业务过程:产品,设计,测试,开发,运维等怎么配合去做这件事情,而且还要考虑A公司的业务过程:病人挂号,就诊,住院,缴费结算等等。

什么是业务逻辑?

业务逻辑是系统架构中体现核心价值的部分,典型的三层结构模型中(如下图),介于表现层和数据访问层之间。

通俗的讲,业务逻辑就是个“怎么做”的问题,是产品的灵魂,它的关注点主要集中在业务流程的实现,业务规则的定制等与业务过程相关的。


细说业务逻辑

1.业务实体

2.业务实体完整性约束

3.业务流程(业务过程)

4.业务规则


业务实体

关键业务相关的动态的概念性对象

比如,电商企业,业务过程中的买家,商品,就是业务实体,软件实现过程中先将其抽象为概念模型(通常用E-R图表示),然后对其建立结构模型,展现在计算机世界中,可能表现为买家表中或商品表中的一条表记录。


 


实体业务完整性约束(
Validation

业务实体完整性约束简单说就是对业务实体的约束,比如对商品实体,商品编号必须唯一


 

注:关于业务实体和业务实体完整性约束,可以看下数据库的相关资料,理解会比较深刻一点


业务流程
(业务过程)

如果把产品比作一个人,那么这个业务过程就是产品的骨架。产品只有实现了这个流程,用户才能用它来实现业务。

例子:购物网站为例子

购买者登录网站
->
浏览商品
->下单

->
结算
->
确认收货
->
评价

例:以学校申请助学金为例子

学生登陆终端
->
提交申请
->
班主任审批
->
分院负责人审批
->
学工处审批
->
资领处审批


 


业务规则

定义1:业务规则是与特定行业中的特定业务功能有关的决策逻辑的表示形式

定义2:业务规则是对业务的某些方面进行定义和约束的声明

例1:以学校申请助学金为例子

“申请助学金的学生必须是贫困生”,这便是一条业务规则,对申请助学金的做了一个前提申明。

那又为何说是决策逻辑呢?程序中,实现经常会这样:

if
学生 is not
平困生

then
拒绝申请

例2:以购物网站为例子

未登录顾客点击购买商品时,提示先登录

例3:以购物网站为例子

买家下单后,通知卖家商品被拍下。

从上面的例子可以看出,业务规则它不会告诉你怎么做,仅是“决策”,告诉你要做什么,而不会告诉你怎么做。比如,上面的贫困生的例子,它不会告诉你怎么申请贫困生,但是会告诉你要去申请贫困生,再如,上面购物网站的例子,它约定说要去通知卖家,但是不会告诉你怎么通知卖家(通过邮件、电话、短信还是其它??)


小知识点:

一般做系统,都避免不了数据验证,完整性约束是业务逻辑的一部分,按理应该放在业务层。但是实际不然,不提倡在“表示层的服务端”放置过多完整性验证。因为,表示层的职责应该仅仅是接收数据并传递给业务层,不应对数据是否合法负责。过多的数据验证,不但令表示层代码臃肿,而且使得表示层职责变得不明确。

可以在“表示层的服务端”放置一些简单的验证,如空值验证,两次输入密码是否一致等,但业务关系紧密的验证,最好放在业务层,甚至有些验证只能在业务层验证,如“当前用户名不能与已有用户名重复”,这种验证需要访问持久化数据,需要由业务层完成。

这里之所以强调“表示层的服务端”,是因为一般在B/S系统中,都会在JavaScript里加入一些基本的数据验证,如空值检查,格式正则匹配

等。这主要是为了减轻服务器负担,将大多数显然包含不合法数据的请求拒绝掉,而不发给服务端验证。当然,因为可能会出现JS被屏蔽或黑客恶意攻击行为,所以,所有验证不论JS中是否验证过,服务端(可能是表示层的服务端部分或业务层)一定要再进行验证。

产品相关 细说软件产品和业务 & 业务过程(流程) & 业务逻辑的更多相关文章

  1. 产品相关 做产品VS做项目

    做产品VS做项目 by:授客 QQ:1033553122 相关定义 根据GB/T19000—2008<质量管理体系基础和术语>,有以下定义 过程process 一组将输入转化为输出的相互关 ...

  2. 使用 UML 进行业务建模:理解业务用例与系统用例的相似和不同之处

    使用 UML 进行业务建模:理解业务用例与系统用例的相似和不同之处   作者:Arthur V. English 出处:IBM   本文内容包括: 背景 业务用例模型与系统用例模型有什么相似之处? 业 ...

  3. 使用Rainbond打包业务模块,实现业务积木式拼装

    背景 每个程序员在学习开发的过程中,都知道解耦和模块化的重要性,也希望自己设计和开发的程序支持模块化,开发好的模块其他人就能快速复用,为了达成这个效果,我们学习各种模块化和解耦的技术,从面向对象的设计 ...

  4. 使用Pipeline抽象业务生命周期流程

    上篇关于流程引擎的文章还是快两年以前的<微服务业务生命周期流程管控引擎>,这中间各种低代码平台层出不穷,虽然有些仅仅是OA+表单的再度包装,但有些的确是在逻辑和操作单元层面进行了真正的高度 ...

  5. O2O 线下业务 和 线上业务,在特征工程上的差异

    人工智能在外卖送达时预估上的应用 这篇讲清楚了 O2O 线下业务 和 线上业务,在特征工程上的差异:

  6. asp.net mvc开发的社区产品相关开发文档分享

    分享一款基于asp.net mvc框架开发的社区产品--近乎.目前可以在官网免费下载,下载地址:http://www.jinhusns.com/Products/Download?type=whp 1 ...

  7. SpringBoot @Async 异步处理业务逻辑和发短信逻辑

    有个业务场景,业务数据审核通过后需要给用户发短信,发短信过程比较耗时,可能需要几秒甚至十几秒,因此使用异步发短信 使用了注解@Async来实现: 1.SpringApplication启用注解@Ena ...

  8. [产品相关] A/B测试终极指南(翻译)

    转载地址: http://blog.sina.com.cn/s/blog_9149268d0100zrx7.html 还记得以前导师说看了英文的文章就把它翻译一下吧,这样会对文章更好地理解,也会有更深 ...

  9. BRD——>MRD——>PRD,产品经理三大文档概念详解及前后逻辑

    转自:https://blog.csdn.net/neikutaixiao/article/details/40819445 商业需求文档Business Requirement DocumentBR ...

随机推荐

  1. BeautifulSoap库入门

    BeautifulSoup类的基本元素 基本元素 说明 Tag 标签,最基本的信息组织单元,分别用<>和</>标明开头和结尾 Name 标签的名字,<p>-< ...

  2. AngularJS学习之旅

    开篇 最近由于项目上可能需要用到AngularJS,公司将技术学习.调研的任务安排了下来,因此开始了我的AngularJS学习之路. 在这之前没写过技术博客,主要是由于太懒,另外自愧文笔不好,因此一直 ...

  3. POJ1038 Bugs Integrated, Inc.

    题目来源:http://poj.org/problem?id=1038 题目大意: 有一家芯片公司要在一块N*M的板子上嵌入芯片,其中1<=N<=150, 1<=M<=10,但 ...

  4. linux 编译安装amqp

    背景: 下面的内容是我根据网上博客小松的文章 https://www.phpsong.com/2223.html 做的修改,因为我走到make 编译amqp这步报错 最开始报下面的这个错误,是因为要安 ...

  5. getCurrentSession 与 openSession() 的区别

    1 getCurrentSession创建的session会和绑定到当前线程,而openSession不会. 2 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而ope ...

  6. 可视化的Redis数据库管理工具redis-desktop-manager的初步使用(图文详解)

    不多说,直接上干货! 无论是Linux 还是 Windows里安装Redis, Windows里如何正确安装Redis以服务运行(博主推荐)(图文详解) Windows下如何正确下载并安装可视化的Re ...

  7. tomcat启动(二)org.apache.catalina.startup.Bootstrap分析

    /** * Bootstrap loader for Catalina. This application constructs a class loader * for use in loading ...

  8. centos 关闭selinux 临时关闭selinux 报错 setenforce: setenforce() failed

    关闭selinux的方法有两种:临时关闭和永久关闭. 查看selinux的状态:estatus [root@--- ~]# sestatus SELinux status: enabled SELin ...

  9. google glog 使用方法

    #include <glog/logging.h> int main(int argc,char* argv[]) { google::ParseCommandLineFlags(& ...

  10. php的$GLOBALS例子

    <?php $test = "test"; function show1($abc){//直接把参数传入函数,函数能用 echo $abc.'<br>'; } f ...