美文网首页
抢红包代码重构

抢红包代码重构

作者: 随手点灯 | 来源:发表于2020-03-23 11:14 被阅读0次

抢红包的功能

定时任务调度-->获取斥候-->探查是否有红包-->获取所有用户-->开始抢红包-->发送谢谢
|
|-->钉钉发送消息告知抢到了多少红包

User 
    AutherHeader
    ID
    packetCount
    name

Group 
    groupName
    groupID

RedpacketJob

UserMapper

RedpacketExplore
    redpacketID explorePacket(User user,Group group)
    
DingDingSender
    boolean SendMessage(String message)
    
RedpacketGrap
    // 所有用户去同一个群组里面抢红包,返回抢到红包的用户
    List<user> grapRedpacket(List<User> users,Group group,String redpacketID)
    
ThanksSender
    String randomThanks()
    boolean sendThanks(User user,Group group)
    
伪代码:

class RedpacketJob {

    @Autowired
    UserMapper userMapper;
    
    @Autowired
    GroupMapper groupMapper;
    
    @Autowired
    RedpacketExplore redpacketExplore 

    @Autowired
    RedpacketGrap redpacketGrap;

    @Autowired
    ThanksSender thanksSender;
    
    @Autowired
    ThreadPoolTaskExecutor threadPoolTaskExecutor; 
    
    @Autowired
    ThreadPoolTaskExecutor dingdingtaskExecutor; 

    public void job() {
            
        // 首先获取到群的信息
        List<Group> groups = groupMapper.selectAllGroup();
        
        // 获取到对应数量的随机斥候
        List<User> users = userMapper.selectRandomUser(groups.size());
        
        // 所有的用户
        List<User> allUsers = userMapp.selectAllUsers();

        for(int i = 0; i < groups.size(); i++ ) {
            
            threadPoolTaskExecutor.execute(
                (group user) -> {
                    // 进行探查
                    RedpacketId  redpacketId = redpacketExplore.explorePacket(user,group);
                    if(StingUtils.isNotEmpty(redpacketID)) {
                        // 抢红包
                        List<User> users = redpacketGrap.grapRedpacket(allUsers,groups,redpacketID)
                        // 发送谢谢
                        for(User users: bingoUser) {
                             thanksSender.sendThanks(bingoUser,group,thanksSender.randomThanks())
                            // 异步通知管理员
                            dingdingtaskExecutor.SendMessage(user.getName + "在" + group.getGroupName + 
                             "群抢到了"+user.getPacketCount()+"红包");
                            
                        }
                    
                    }
                
                }
            );
        } 
    }
}

单一职责: 每个模块抽象成单独的类
开闭原则: 抽象出接口,探查器,抢红包器
里式替换: 子类不会比父类更加复杂,并且不会违背父类的初衷
接口隔离: 对接口做拆分
依赖倒置: 顶层类注入探查红包和抢红包的

高内聚低耦合:
获取用户可以抽象出一个模块
控制反转

相关文章

  • 抢红包代码重构

    抢红包的功能 定时任务调度-->获取斥候-->探查是否有红包-->获取所有用户-->开始抢红包-->发送谢谢||-...

  • 猴赛雷抢红包插件App

    世上没有什么是一颗猴赛雷不能解决的,如果有,那就两颗 代码重构了,结构更清晰,微信抢红包代码和qq抢红包代码分离,...

  • 代码重构专题(转载)

    代码重构(一):函数重构规则代码重构(二):类重构规则代码重构(三):数据重构规则代码重构(四):条件表达式重构规...

  • 抢红包案例分析以及代码实现(四)

    前文回顾 抢红包案例分析以及代码实现(一) 抢红包案例分析以及代码实现(二) 抢红包案例分析以及代码实现(三 ) ...

  • 《重构》一书总结(二)

    《重构》一书总结(二) 重构的重点,在于对那些代码进行重构,如果重构不当,反而适得其反。 重构代码终结如下 1.D...

  • Mvc分页组件MvcSimplePager代码重构

    Mvc分页组件MvcSimplePager代码重构 Mvc分页组件MvcSimplePager代码重构1.1 In...

  • 编程的方法——重构、测试等

    重构 为什么要重构? 重构代码是保持代码质量的一个极其有效的手段,它可以避免你的代码腐化到无可救药的地步。 重构可...

  • 代码重构利器

    使用重构件(Codemod)加速 JavaScript 开发和重构代码重构利器 —— jscodeshift 对于...

  • 为什么要代码重构?如何重构?常见重构技巧

    关于重构 为什么要重构 代码重构漫画 项目在不断演进过程中,代码不停地在堆砌。如果没有人为代码的质量负责,代码总是...

  • 重构

    重构时,先梳理代码,删除无用的逻辑,进行小的消除重复代码重构,封装小方法重构,等等,目的是让大段大段代码之前的耦合...

网友评论

      本文标题:抢红包代码重构

      本文链接:https://www.haomeiwen.com/subject/mzgiyhtx.html