当前位置: 首页 > 编程学习 > 软件工程 > 面向对象 > 正文

使用面向对象抽取业务算法

2018-04-22 来源:博客园/王森

描述

前面我们已经对领域内的名词进行了抽取,并且已经确定了业务流程中参与的核心对象。

但是对象只是静态的描述,系统中往往会有很多的业务操作,偏算法的,之前我们说过

领域内的对象往往是比较稳定不怎么变化的,但是,业务的流程以及业务操作这些是往往

千变万化,防不胜防,那么我们如何去及时发现这些系统内变化点,并且如何使用面向对象

的方式去抽象,封装它呢?,下面就简单介绍我们大神的一些个人经验,也在此记录一下。

目的

关注系统中的变化点或者说业务的流程中某个节点的多变的算法,提供系统的可维护性和扩展性。

步骤

先说步骤,步骤后面跟着一些场景进行解析,试着理解步骤。

找出变化点

这是第一步也是关键的一步,如果你连这个系统中的变化点都找不到,下面的工作也就

无从谈起,所以我们在这个阶段就要去细心观察找出那些业务的变化点,一般的我们可以从产品的原型中,产品的沟通中可以找到:

关注那些从描述上看起来不一样,却又是在做同一件事的场景。

去限定词

找出这个场景或者算法每次而且每条都出现的领域名词和没有限定词的动词,其他的全部可以忽略。

简单的说就是把场景中的不断出现的领域名词都删除掉,留下动词。

抽取动词

根据上一步的操作,我们对场景中的动词需要进行抽象一下,使用一个动作统一概括。

抽取接口

将这个动作作为一个接口存在,确定这个接口中的方法用来做什么以及它的输入,输出。

说白了就是定义一个函数的名称,参数,返回值。

一般来说输入的要是抽象中每次都出现的名词,输出是这个抽象需要的内容。

聚合接口

并不是说一个接口只能有一个方法,实际上,有些方法是成双成对,甚至是成几对出现的。

如果发现两个接口合在一起刚好可以表达一个完整的事情就可以将这两个接口合并成一个接口。

实例解析

场景一描述

在优学习(教育网站http://www.uxuexi.com)这个网站上为用户提供了很多的服务,比如:

可以购买单个视频进行观看,也可以将视频打包购买进行观看,可以购买阅卷服务让老师给用户的试卷进行评阅

也可以购买约课的服务让老师上门或者在线进行辅导

这个业务场景是一个变化点,因为平台中可以添加任何具有服务性质的东西让用户购买。

这里可以抽取一个商品的概念,其实用户购买的就是商品,不管它是视频,评卷服务,辅导服务都是商品。

所有我们按照步骤就这么做。

去限定词:

购买xx商品得到xx商品的服务

抽取动词:

购买,服务

抽取接口:

IBuy

接口中的方法:

方法名称:goToBuy

参数:商品

执行:完成购买

返回:空

IService

方法名称:supply

参数:商品

执行:商品提供的服务

返回:空

类图如下:

合并接口

我们会发现但凡我们需要增加一个商品都需要实现这两个接口,这个时候就说明我们可以

将这两个接口抽取成一个接口,这就是聚合接口。

类图如下: