pushboy 2022-05-27 15:18 采纳率: 80%
浏览 65
已结题

怎样设计,以动态增强或者减少类的功能,适应业务变化?

问题遇到的现象和发生背景

我有一个订单处理类,比如叫OrderService
1、在开始的时候,需求是增删改查Order,于是写了对应的方法;
2、随着业务发展,需要根据用户支付情况,修改订单的状态;比如刚生成是待结算,用户支付完成之后是已支付,用户中途取消是已取消等等;于是在OrderService中增加了UpdateOrderState的方法,用来管理订单的状态;
3、现在引入会员概念,当会员支付成功后,需要计算会员获得的积分;于是在UpdateOrderState方法中增加了会员积分的处理;
4、现在允许退货,当会员支付完成又退货时候,需要扣减会员积分;于是在UpdateOrderState方法中增加了调用 订单退货时候,对于获得的积分的扣减的处理 接口;
5、现在增加老会员介绍新会员奖励积分的需求,当会员支付完成订单之后,需要计算出奖励积分,给老会员加上;于是UpdateOrderState方法中增加了 调用 老会员奖励积分的处理接口;
6、同样,如果会员退货之后,也要处理老会员奖励积分退还的逻辑;
随着业务需求的变化,OrderService类以及UpdateOrderState方法中调用的接口就会越来越多
比如要调用execMemberPoint()、execReturnPoint()、execBonusPoint()等等一系列接口
等哪一天需求变化,又不需要奖励积分了,又要把这个调用从方法中取消

那么,采用什么样的设计方法才能减少这种叠加,尽量少改动代码以适应业务变化呢?

我的解答思路和尝试过的方法

我想过装饰器模式、动态代理、filter等方法,但是都觉得不太合适

  • 写回答

3条回答 默认 最新

  • 葛芮拉 2022-05-27 16:10
    关注

    这种的可以在OrderService 之上再抽一层服务,聚合服务,会员的积分扣减单独就是会员的服务,比如MemberService,在这个聚合服务层,根据实际的业务需求去调用各个业务领域的服务(OrderService、MemberService)去组合新的服务。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月14日
  • 已采纳回答 6月6日
  • 创建了问题 5月27日

悬赏问题

  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历