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

描述

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

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

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

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

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

目的

关注系统中的变化点或者说业务的流程中某个节点的多变的算法,

提供系统的可维护性和扩展性。

步骤

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

找出变化点

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

无从谈起,所以我们在这个阶段就要去细心观察找出那些业务的变化点,

一般的我们可以从产品的原型中,产品的沟通中可以找到:

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

去限定词

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

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

抽取动词

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

抽取接口

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

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

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

聚合接口

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

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

实例解析

场景一描述

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

可以购买单个视频进行观看,

也可以将视频打包购买进行观看,

可以购买阅卷服务让老师给用户的试卷进行评阅

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

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

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

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

去限定词:

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

抽取动词:

购买,服务

抽取接口:

IBuy

接口中的方法:

方法名称:goToBuy

参数:商品

执行:完成购买

返回:空

IService

方法名称:supply

参数:商品

执行:商品提供的服务

返回:空

类图如下:

合并接口

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

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

类图如下:

场景二描述

在电商网站中支付是一个重要的环节,往往会有以下需求:

用户可以使用支付宝完成订单支付

用户可以使用微信完成订单支付

用户可以使用银行卡的方式完成订单支付

找出变化点

这个场景的变化点就是用户可以使用多种方式完成支付。

去限定词

使用xx方式完成订单支付

抽取动词

这个场景强调的动作是支付,所以动词应该就是:去支付

但是,我们知道每一个支付都需要我们提供给一个支付完成的回调供支付平台通知支付结果,

所以这里要添加一个动作:完成支付

抽取接口

接口中的方法:

方法名称:goToPay

参数:订单

执行:完成购买

返回:空

方法名称:finish

参数:订单

执行:完成购买

返回:空

类图:

场景三描述

在做优学习网站时,出现了这么一个场景,每一个视频的播放需要鉴权,

也就是说用户点击某个视频的时候由后台决定他是否有观看的权限。

情况如下:

免费的视频可以观看

课程包中的第一个视频可以观看

购买的视频中包含这个视频的可以观看

请求来源的域名如果在白名单中可以观看所有视频

网站的合作商可以观看所有视频

等等。。。。

找出变化点

判断视频是否可以播放的条件在不断增加,这就是一个变化点。

去限定词

视频是否可以观看

抽取动作

判断视频是否可以观看其实就是鉴权,所以动作就是:是否可以播放

抽取接口

接口名称:IVideoAuthentication

接口中的方法:

方法名称:goToPay

参数:视频id

执行:判断是否具有播放权限

返回:布尔

类图:

设计心得

接口有了,但是我们怎么更好组织它呢?

一般的场景我们可以采用以下方案:

平行算法

如果这些接口的具体实现在同一时刻只能出现一个具体算法,这些算法又可以平行替换,

我们就可以参考“策略模式"去设计。

串行算法

如果这些接口的具体实现在同一时刻有可能需要组合一起去完成某个功能这就是串行,

我们可以使用”职责链模式“去设计。

考虑重用

如果这些算法之间有一些公用的逻辑,业务,算法我们可以考虑使用,模板模式,装饰模式去解决重复问题,

让我们的设计更加合理有扩展性。

时间: 2024-10-06 06:43:37

使用面向对象抽取业务算法的相关文章

C++primer笔记:IO库、顺序容器、关联容器、面向对象、泛型算法、模板和泛型编程

第八章:IO库不直接来处理输入输出,而是通过在标准库中的一些类型来处理io istream ostream cin cout cerr getline函数 iostream:定义了用于基本读写流的基本类型 fstream: 定义了基本的读写命名文件的类型 sstream:定义了读写内存的string对象的类型 IO对象无拷贝或者赋值 条件状态:IO定义了一些函数和标志,可以帮助我们访问和操作流得条件状态 strm::iostate 条件状态的完整功能 strm::badbit 流已崩溃 strm

面向对象思想

面向对象思想 编辑 面向对象的程序设计语言必 须有描述对象及其相互之间关系的语言成分.这些程序设计语言可以归纳为以下几类:系统中一切事物皆为对象:对象是属性及其操作的封装体:对象可按其性质划 分为类,对象成为类的实例:实例关系和继承关系是对象之间的静态关系:消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式:方法是消息的序列. 中文名 面向对象思想 性    质 思想 类    别 程序设计语言 领    域 软件 目录 1 简介 2 理解 3 面向对象 4 存在问题 5 概念特征 6 要

面向对象编程思想

http://blog.csdn.net/yzh648542313/article/details/34157593 面向对象是一种新兴的程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计. 它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单

设计模式李建忠(面向对象程序设计部分)

面向对象 面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流.面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围.如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构.CAD技术.人工智能等领域.       谈到面向对象,这方面的文章非常多.但是,明确地给出对象的定义或说明对象的定义的非常少——至少我现在还没有发现.其初,“面向对象”是专指在程序设计中采用封装.继承.抽象等设计方法.可是,这个定义显然不能再适

ETL之增量抽取方式

1.触发器方式 触发器方式是普遍采取的一种增量抽取机制.该方式是根据抽取要求,在要被抽取的源表上建立插入.修改.删除3个触发器,每当源表中的数据发生变化,就被相应的触发器将变化的数据写入一个增量日志表,ETL的增量抽取则是从增量日志表中而不是直接在源表中抽取数据,同时增量日志表中抽取过的数据要及时被标记或删除.为了简单起见,增量日志表一般不存储增量数据的所有字段信息,而只是存储源表名称.更新的关键字值和更新操作类型(KNSEN.UPDATE或DELETE),ETL增量抽取进程首先根据源表名称和更

面向对象编程思想 - 月亮晶石的日志 - 网易博客

面向对象是一种新兴的程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计. 它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位(而不是用一些与现实世界中的事物相关比较远,并且没有对应关系的其它概念来构造系统).这可以使系统直接地映射问题域,保

ETL中的数据增量抽取机制

ETL中的数据增量抽取机制 (     增量抽取是数据仓库ETL(extraction,transformation,loading,数据的抽取.转换和装载)实施过程中需要重点考虑的问 题.在ETL过程中,增量更新的效率和可行性是决定ETL实施成败的关键问题之一,ETL中的增量更新机制比较复杂,采用何种机制往往取决于源数据系统的 类型以及对增量更新性能的要求. 1 ETL概述 ETL包括数据的抽取.转换.加载.①数据抽取:从源数据源系统抽取目的数据源系统需要的数据:②数据转换:将从源数据源获取的

trie树信息抽取之中文数字抽取

这一章讲一下利用trie树对中文数字抽取的算法.trie树是一个非常有用的数据结构,可以应用于大部分文本信息抽取/转换之中,后续会开一个系列,对我在实践中摸索出来的各种抽取算法讲开来.比如中文时间抽取,地址抽取等. Trie树 trie树又称为前缀树,索引树,字典树.用来对字符串进行索引,每个节点存储一个字符,每个叶子节点代表一个字符串,即从根到它的路径上所有字符的序列. 这个结构有什么优点呢?可以快速的匹配一个目标字符串中存在的单词.换句话说,我有一个字典,是单词的集合,我把字典中所有的单词存

面向对象编程、面向组件编程、面向方面编程、面向服务编程

1.什么是面向对象编程(Object-Oriented Programming)? 面向对象编程 (Object-Oriented Programming)简称OOP技术,是开发计算机应用程序的一种新方法.新思想.过去的面向过程编程常常会导致所有的代码都包含在几个模块中,使程 序难以阅读和维护.在做一些修改时常常牵一动百,使以后的开发和维护难以为继.而使用OOP技术,常常要使用许多代码模块,每个模块都只提供特定的功能, 它们是彼此独立的,这样就增大了代码重用的几率,更加有利于软件的开发.维护和升