内容简介:EDEN-MACE 是一套灵活的管理佣金的分销管理系统,它涵盖并且总结了目前流行的分销模式,让分销更加简单。开源地址:原来的账务的管理,使用策略模式+工厂模式,导致每次新增一个账户之后就会复制大量的重复代码,这样会导致代码大量的冗余。
EDEN-MACE 是一套灵活的管理佣金的分销管理系统,它涵盖并且总结了目前流行的分销模式,让分销更加简单。
开源地址: https://gitee.com/codingdb/distribution_management
原来的账务的管理,使用策略模式+工厂模式,导致每次新增一个账户之后就会复制大量的重复代码,这样会导致代码大量的冗余。
根据上面的问题,将策略模式换成了模板模式+工厂模式,每次新增一个账户的时候就可以只增加改动的部分即可。
下面演示新增一个交易账户需要做的事(只有最后一段需要新增,第一部分为静态工厂方法初始化,第二部分为模板方法调用,当然省略了部分部分代码,省略的代码为原来的公共代码)
public AmountTemplateFactoryContext(String type) { switch (type){ case "0": amountTemplate = new TradeAmountServiceImpl(); break; case "1": amountTemplate = new LevelAmountServiceImpl(); break; case "2": amountTemplate = new InviteAmountServiceImpl(); break; default: break; } }
public abstract void addMoney(DisMemberAmount memberAmount,BigDecimal amount,DisAmountSituation situation); @DataSource(name = DSEnum.DATA_SOURCE_BIZ) public final void addMoney(String userId, BigDecimal amount, String sourceName, String type) { .... addMoney(memberAmount,amount,situation); ... } public abstract void frozenAmount(DisMemberAmount memberAmount,BigDecimal amount); @DataSource(name = DSEnum.DATA_SOURCE_BIZ) public final void frozenAmount(String userId, BigDecimal amount) { ... frozenAmount(memberAmount,amount); ... } public abstract void reduceMoney(DisMemberAmount memberAmount,BigDecimal amount,DisAmountSituation situation); @DataSource(name = DSEnum.DATA_SOURCE_BIZ) public final void reduceMoney(String userId, BigDecimal amount) { .... reduceMoney(memberAmount,amount,situation); ... } public abstract void returnMoney(DisMemberAmount memberAmount,BigDecimal amount); @DataSource(name = DSEnum.DATA_SOURCE_BIZ) public final void returnMoney(String userId, BigDecimal amount) { ... returnMoney(memberAmount,amount); ... }
public class TradeAmountServiceImpl extends AmountTemplate{ @Override public void addMoney(DisMemberAmount memberAmount, BigDecimal amount,DisAmountSituation situation) { BigDecimal afterThirdAmount=new BigDecimal(0); BigDecimal beforeThirdAmount=new BigDecimal(0); afterThirdAmount=memberAmount.getTradeTotalAmount().add(amount); beforeThirdAmount=memberAmount.getTradeTotalAmount(); memberAmount.setTradeTotalAmount(memberAmount.getTradeTotalAmount().add(amount)); memberAmount.setTradeAvaibleAmount(memberAmount.getTradeAvaibleAmount().add(amount)); situation.setSpecificBeforeChangeAmount(beforeThirdAmount); situation.setSpecificAfterChangeAmount(afterThirdAmount); } @Override public void frozenAmount(DisMemberAmount memberAmount, BigDecimal amount) { BigDecimal avaibleThirdAmount=new BigDecimal(0); avaibleThirdAmount=memberAmount.getTradeAvaibleAmount(); if(avaibleThirdAmount.compareTo(amount)==-1){ throw new BussinessException(BizExceptionEnum.LOW_MONEY); } memberAmount.setTradeAvaibleAmount(memberAmount.getTradeAvaibleAmount().subtract(amount)); memberAmount.setTradeFrozenAmount(memberAmount.getTradeFrozenAmount().add(amount)); } @Override public void reduceMoney(DisMemberAmount memberAmount, BigDecimal amount,DisAmountSituation situation) { BigDecimal avaibleThirdAmount=new BigDecimal(0); avaibleThirdAmount=memberAmount.getTradeFrozenAmount(); if(avaibleThirdAmount.compareTo(amount)==-1){ throw new BussinessException(BizExceptionEnum.LOW_MONEY); } BigDecimal beforeThirdAmount=new BigDecimal(0); beforeThirdAmount=memberAmount.getTradeTotalAmount(); memberAmount.setTradeFrozenAmount(memberAmount.getTradeFrozenAmount().subtract(amount)); memberAmount.setTradeTotalAmount(beforeThirdAmount.subtract(amount)); situation.setSpecificBeforeChangeAmount(beforeThirdAmount); situation.setSpecificAfterChangeAmount(beforeThirdAmount.subtract(amount)); } @Override public void returnMoney(DisMemberAmount memberAmount, BigDecimal amount) { BigDecimal avaibleThirdAmount=new BigDecimal(0); avaibleThirdAmount=memberAmount.getTradeFrozenAmount(); if(avaibleThirdAmount.compareTo(amount)==-1){ throw new BussinessException(BizExceptionEnum.LOW_MONEY); } memberAmount.setTradeAvaibleAmount(memberAmount.getTradeAvaibleAmount().add(amount)); memberAmount.setTradeFrozenAmount(memberAmount.getTradeFrozenAmount().subtract(amount)); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- EDEN-MACE 1.5.0 更新,使用模板方法新增账务
- EDEN-MACE 1.6.0 发布,新增分布式锁,保证账务安全性
- 线上账务系统余额并发更新问题记录
- 多业务线亿级体量,携程是怎么做账务中台的
- 超越 “双十一”:ebay 百万 TPS 支付账务系统的设计与实现
- WookTeam 1.2 发布,新增知识库markdown编辑器,新增知识库协作更新通知
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
App研发录:架构设计、Crash分析和竞品技术分析
包建强 / 机械工业出版社 / 2015-10-21 / CNY 59.00
本书是作者多年App开发的经验总结,从App架构的角度,重点总结了Android应用开发中常见的实用技巧和疑难问题解决方法,为打造高质量App提供有价值的实践指导,迅速提升应用开发能力和解决疑难问题的能力。本书涉及的问题有:Android基础建设、网络底层框架设计、缓存、网络流量优化、制定编程规范、模块化拆分、Crash异常的捕获与分析、持续集成、代码混淆、App竞品技术分析、项目管理和团队建设等......一起来看看 《App研发录:架构设计、Crash分析和竞品技术分析》 这本书的介绍吧!