系统已投运,用户提新需求!如何不改变结构又实现业务流扩展?

软件复用的关键是寻找相似性,如果相似性表现为业务流程相似,但是业务单元具有特殊性,就可以定义一个操作中的业务流程骨架,而通过一个接口将一些业务单元的实现延伸到实现类中去,使得可以不改变一个业务流程的结构,即可重新定义该业务流程的某些特定业务单元。目前,已经有多种设计解决方案可以实现业务流扩展。

模板方法(Template Method)解决方案

模板方法(Template Method)解决方案的意图是在抽象类为操作定义了一个算法的骨架,将其中一些步骤推迟到子类中实现,这就可以在不改变算法的结构的情况下,重新定义该算法的细节。不同的子类可以以不同的方式实现这些抽象方法,从而可以对剩余的逻辑有不同的实现。这就提供了一个很好的代码复用平台,并且可以适应具体方法的变化,如下图所示。

模板方法内说明代码如下:

public abstract class Payment{

………….

public String goSale(){

String x = "不变的流程一";

x += Action(); //可变的流程

x += amount + ", 正在查询库存状态"; //属性和不变的流程二

return x;

}

public abstract String Action();

}

假定系统已经投运,用户提出新的需求,要求加上信用卡支付和支票支付,可以立刻加以升级。

桥梁(Bridge)解决方案

桥梁(Bridge)解决方案与模板方法(Template Method)解决方案所解决的问题是类似的,但是模板方法使用了继承,但桥梁使用了聚集,所以是更符合设计原则的。我们可以通过一个关于支付的简单例子可以说明它的原理。

说明代码如下。

public class Payment{

……

private Implementor imp;

public void setImp(Implementor s){

imp=s;

}

public String goSale(){

String x = "不变的流程一";

x += imp.Action(); //可变的流程

x += amount + ", 正在查询库存状态"; //属性和不变的流程二

return x;

}

}

interface Implementor{

public String Action();

}

假定系统已经投运,用户提出新的需求,要求加上信用卡支付和支票支付,我们将怎样处理呢?如下图所示。这样就减少了系统的耦合性。而在系统升级的时候,并不需要改变原来的代码。

时间: 2024-10-01 00:59:54

系统已投运,用户提新需求!如何不改变结构又实现业务流扩展?的相关文章

运营部门提数据需求的一些小技巧

本文主要是介绍业务部门(主要是运营部门)在没有完善的数据平台时如何更好的向产品经理提出数据需求,来满足自己某些数据分析. 一.谁会提数据需求? 一般来说的话,更多的是运营提出的数据需求会更多.不过也会存在其他业务部门,比如财务.结算.市场.技术部等其他业务部门. 二.有哪些数据需求? · 产品数据:PV.UV.页面跳出率.DAU.留存率.事件转化率.用户属性等等. · 业务数据:注册数.下载数.订单数.取消数.注册转化率.订单转化率等等. 三.如何提数据需求? 举个栗子:国庆节会上线一个新业务的

CentOS系统登陆root用户后发现提示符显示-bash-4.2#(已解决)

问题: 在root用户下终端显示,如图所示: 尝试退出登陆root用户依然不能解决 原因: root主目录下缺失.bash_profile和.bashrc文件 Tip: /etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:  为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取. ~/.bash_profile:

门户级UGC系统的技术进化路线——新浪新闻评论系统的架构演进和经验总结(转)

add by zhj:先收藏了 摘要:评论系统是所有门户网站的核心标准服务组件之一.本文作者曾负责新浪网评论系统多年,这套系统不仅服务于门户新闻业务,还包括调查.投票等产品,经历了从单机到多机再到集群,从简单到复杂再回归简单的过程. 评论系统,或者称为跟帖.留言板,是所有门户网站的核心标准服务组件之一.与论坛.博客等其他互联网UGC系统相比,评论系统虽然从产品功能角度衡量相对简单,但因为需要能够在突发热点新闻事件时,在没有任何预警和准备的前提下支撑住短短几分钟内上百倍甚至更高的访问量暴涨,而评论

ActiveDirectory 回收站特性快速恢复已删除用户

什么是Active Directory 回收站? Active Directory 回收站通过增强保存和还原意外删除的 Active Directory 对象的能力,极大 程度的缩短了目录服务的中断时间.使用活动目录回收站功能无需从备份中还原 Active Directory 数据.无须重新启动 Active Directory 域服务或重新启动域控制器. 启用 Active Directory 回收站后,会保留已删除 Active Directory 对象的所有属性,并将整个 对象还原到与被删

sql server 2005 数据库迁移问题总结——"错误15023:当前数据库中已存在用户或角色"

在数据库迁移过程中,如何设置不好用户与登录,会造成"错误15023:当前数据库中已存在用户或角色". 现在整理下思路: 1.在原数据库进行数据库备份 ***.bak 文件: 2.在新建数据库,建立与原数据库相同的登录名: 3.在新数据库上恢复备份的数据库文件 ***.bak 文件:选择覆盖原数据库文件: 4.将数据库恢复到其他服务器时,需要处理"孤立用户"的问题.具体解决办法如下: 用户和权限,但可能没有相应的登录或者登录所关联的用户可能不是相同的用户.这种情况被称

Linux系统中切换用户身份su与sudo的用法与实例

日常操作中为了避免一些误操作,更加安全地管理系统,通常使用的用户身份都为普通用户,而非root.当需要执行一些管理员命令操作时,再切换成root用户身份去执行. 普通用户切换到root用户的方式有:su和sudo. 1,su - (su为switch user,即切换用户的简写) 格式:su -l USERNAME(-l为login,即登陆的简写) -l可以将l省略掉,所以此命令常写为su - USERNAME 如果不指定USERNAME(用户名),默认即为root,所以切换到root的身份的命

实现业务系统中的用户权限管理--设计篇

B/S系统中的权限比C/S中的更显的重要,C/S系统由于具有特殊的client,所以訪问用户的权限检測能够通过client实现或通过client+server检測实现,而B/S中,浏览器是每一台计算机都已具备的,假设不建立一个完整的权限检測,那么一个"非法用户"非常可能就能通过浏览器轻易訪问到B/S系统中的全部功能.因此B/S业务系统都须要有一个或多个权限系统来实现訪问权限检測,让经过授权的用户能够正常合法的使用已授权功能,而对那些未经授权的"非法用户"将会将他们彻

干货:如何利用CRM系统数据做用户画像?

企业在使用CRM系统一段时间后,系统就会积累很大的用户数据,那这些数据有什么用呢?当然有,我们可以对数据进行分析,做用户画像,从而更了解我们的客户,帮助企业做决策. 今天智云通CRM系统小编跟大家一起聊聊如何利用CRM系统数据做用户画像. 一步步来.当我们谈到了解我们的客户(understand our member base),无论是用户类群(segmentation) 还是用户肖像(persona) ,其实说白了是对两类客户认知的判断: l 现存客户 (Existing Customer)

让你提前认识软件开发(38):完毕第一个新需求

第3部分 软件研发工作总结 完毕第一个新需求 在入职后不久,我得到了第一个新任务:完毕某个版本号的一个新需求.所谓的"需求",就是用文档的形式告诉我们要做什么.要实现什么功能. 在得到需求文档之后,我仔细致细地阅读了好几遍.发现有些地方自己并非非常明确.假设在自己都不是非常确定的情况下改动代码,其后果是非常严重的,项目经理以前这样告诫我.我把自己的疑惑以邮件的形式发给了SE(系统project师).让他把需求讲明确.在我们公司,SE负责写需求,他们要把用户想要实现的功能写成文档,然后让