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日

悬赏问题

  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题