作为菜鸟,进入一个新公司,更多的是怀着学习的态度,期待遇到一个牛逼的大神,带领自己一路披荆斩棘,貌似这个新的环境和自己想的差距有点大~~~

  不管环境怎么样,还是从自己开始,希望不能完全压在别人身上。关于新公司的产品的重构,主要从技术角度说一下,尽量剥离公司的业务。新人初来乍到,怎么插入别人正在做的工作呢?说实话很难!所以领导给了一个和别人的工作不交叉(代码上)模块——任务模块!

1、场景描述

  公司:一个创业公司

  技术:java以及一堆开源框架

  产品现状:已经经历了1.0的大版本,此次是2.0的开发和重构。据老员工讲,产品1.0时代是我现任领导和他不分昼夜,整出来的,具体多长时间不知道。说的代码里都是坑,慢慢的都填的差不多了,但是代码变成一坨一坨的了!2.0的使命就是,让已经有的看起来有条理,更合理,让还没有的做起来更容易。

直白的说,就是把1.0中的隐含的坑,更加优质的解决掉,让1.0里面的代码更加的优雅,让很多固定死的地方,在2.0里面活起来,更加容易扩展,更加容易修改。

2、任务模块介绍

  我拿到的第一版需求的描述很简单,让用户更活跃,让用户做任务,任务分为每天不同的任务(以后称为每日任务)和长期积累完成的任务(以后称为长期任务),还包括用户等级的管理,然后给我发了一个excel表格,里面是一堆不同的任务。这些任务涉及到不同的业务中,对用户的不同业务行为进行统计处理,最后分析用户的任务完成情况,进行奖励。总的时间(包括分析需求,设计,开发)是两周。

3、需求分析

  其实听完需求后的脑子里面只有俩字“懵逼”,思考了一下,脑子里面还是“懵逼”。理不清的主要原因是对公司的现有业务不熟悉,不知道的结果。然后就是找个老员工,聊了聊,明白了,这个任务在1.0是个怎么回事,要求就是在2.0也有,但是从代码上要更优雅,更灵活。

  研读需求后,总结了一下几方面的要点:

  任务分类:

    a)每日任务:不要领取任务,每天自动推送给用户;需要用户手动领取奖励;完成后不再进行奖励(只奖励一次)

    b)长期任务:需要用户手动领取任务,跟踪用户任务完成进度;任务完成后用户手动领取奖励;只奖励一次

    c)营销活动:对用户是不可见的,只有说明;跟踪用户行为,完成后自动发放奖励;不限制次数,只要完成一次,就奖励一次

  业务分类:

    a)登录APP

    b)购物

    c)加好友

    d)为好友点赞

    e)发布文章

    f)为APP提出建议,并采纳

    g)完善个人信息

  奖励分类:

    奖励的分类算是整个模块最简单但是很重要的地方。奖励划分如下:

    a)应用的虚拟币(以后称为金币)可以和人民币有一定的兑换率的

    b)优惠券在应用商城里面的可以使用的优惠券

    c)标志奖励类似鹅厂的黄钻红钻的

    d) 用户的等级奖励

4、模块设计

  为了保证代码的灵活性,需要尽量少的对现有代码的侵入,就考虑到了AOP(AOP关于面向切面方面的东西就不多说了);要保证业务的灵活性,就是在业务扩展的时候,可以很最大程度的简化开发流程,就需要对整个模块整体进行抽象设计。中间的思考过程,不知道该怎么描述,但是我觉的和个人经验有很大关系。

  整个模块要做的事是结合业务和用户的操作行为,对用户进行奖励,这是目标!

  从目标中可以得出两个明显的对象:业务、奖励。怎么确定业务和奖励的关系,就是前面说的任务(每日任务和长期任务)做的事了。整体需求已经很明确了。

  对软件结构进行设计,整个结构我设计的是一个漏斗形状的,最顶端是业务,最底端是奖励。如图:

  图中的业务块是其他人开发的,就不详细进行描述了。主要说一下逻辑处理和奖励用户的流程。如图:

  代码结构,通过工厂和观察结合,完成整个模块。简单类图如下:

  对于不同的业务有不同的处理流程,不同业务也会产生不同奖励操作。不同业务的处理过程的处理器是通过工厂模式,获得具体的处理器;根据业务需要为不同的处理器设置不同的奖励观察对象。处理器经过不同的业务处理,对奖励条件的通知奖励观察对象,进行奖励操作。

5、总结

  优点:

    a)业务处理过程,对于横向扩展可以满足,只对新增业务的开发即可,对现有代码的侵入性很低

    b)奖励的横向扩展满足一定程度的灵活性,但是会对处理器的观察对象,具有一定的侵入性

  缺点:

    a)业务的纵向扩展灵活性不足,如果需要对某一个业务进行更深层次的挖掘,需要调整现有代码

    b)奖励的横向扩展现在做的不足,下一步需要扩展

    c)奖励方面的综合判断条件管理不合理,需要优化(考虑用职责链管理)

源码:待上传

转载于:https://www.cnblogs.com/monkeyming/p/5800577.html

新公司的一次重构升级相关推荐

  1. 【观察】智能安防的新时代,华为的重构和创新

    申耀的科技观察 读懂科技,赢取未来! 毫无疑问,如今的世界正在以加速度进入到智能化时代,特别是各项业务的云化深入以及万物互联,数据处理能力的进一步提升,智能算法一次又一次的突破,以及未来5G在行业中更 ...

  2. 新公司研发能力低下,何去何从?

    我是去年年底辞职的,到了现在的新公司,和我一起进公司的还有个09年毕业的研究生.到了公司不多久,我们就参加到了一个项目研发中,在研发的过程中,我们都发现公司的代码简直就是垃圾: 一:代码的命名很乱,简 ...

  3. 滴滴自动驾驶部门成立独立公司,CTO张博兼任新公司CEO

    整理 | 夕颜出品 | AI科技大本营(ID:rgznai100) 导读:8 月 5 日,滴滴出行官方微信公众号发文,宣布旗下自动驾驶部门升级为独立公司.目前,新成立公司的名称还未曝光,但据官方介绍将 ...

  4. 当谷歌员工来到新公司的那一天,发现原来公司什么都没有

    云栖大会是阿里每年一次的秀肌肉,2020年的云栖大会采用了云上直播,昨天一天把云栖大会的内容整体上算是看了一遍,当然更多是挑着看的,不然太多了.总体的感觉阿里还是国内技术最过硬的公司之一(主要是考虑到 ...

  5. 刚刚,国家新型互联网交换中心(以及新公司)正式成立!不止于降低网间结算费用...

    经过前期的充分调研和去年开始的积极试点,我国在新型互联网交换中心领域取得了阶段性成果--6月30日,国家(杭州)新型互联网交换中心宣布正式启用. 与此同时,由三大运营商.阿里.网易等参股的浙江省新型互 ...

  6. 选择比努力更重要,面试新公司,从哪些细节能判断公司的前途?项目的好坏?...

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 很多朋友在入职新 ...

  7. 互联网晚报 | 3月24日 星期四 |​ ​国务院安委办:立即开展民航安全隐患排查;​新东方新公司经营范围含电竞赛事策划...

    国务院安委办:立即开展民航安全隐患排查 从应急管理部获悉,日前,国务院安委会办公室.应急管理部联合印发通知,要求各地区.各有关部门和单位以东航"3·21"坠机事故为警示,清醒认识当 ...

  8. 贾跃亭的造车梦还在继续 旗下FF在国内成立新公司

    12月21日消息,贾跃亭旗下的法拉第未来(Faraday Future,简称FF)又有新动作.日前,FF在珠海成立了新公司,注册资本2.5亿美元. 据企业信息显示,法法汽车(珠海)有限公司于2020年 ...

  9. java如何无感知部署_干货!如何平稳用户无感知的完成系统重构升级

    前言 我们在实际开发系统的过程当中,很有可能会遇到需要进行系统重构升级的情况,需要重构的原因可能是之前的设计不合理,导致现在维护起来非常的困难,也有可能是现在的业务发展非常迅速,需要进行分库分表了又或 ...

最新文章

  1. 获得 DataSet中的记录总数
  2. C语言二叉树的逆向有序遍历(附完整源码)
  3. IT自动化:自动化的网络管理变得很重要
  4. python的for循环累加_在python中将6 for循环累计和矢量化
  5. 南阳理工计算机全国排名,全国工科实力最强的10所高校排名,
  6. MySQL-locate()函数
  7. 联想服务器imm默认地址_命令下配置ip地址
  8. 小记:《技术进步引发的灵感革命》网易游戏学院第二届公开日
  9. office系统构架
  10. 切换网段后,处理用友T6变成演示版故障
  11. AngularJS 讲解五, Factory ,Service , Provider
  12. c语言二级考试程序设计题的做题步骤,计算机二级C语言上机考试操作步骤与流程.doc...
  13. Java项目:SSM校园共享自行车出租管理系统
  14. Spring学习路线
  15. 导论计算机论文题目,计算机类论文题目
  16. win7 设置 快速启动栏
  17. 奶瓶(beini) 又一蹭网神器 1.2.2增强版带600万密码字典
  18. 中国程序员开发的远程桌面火了!Mac可用,只有9MB,支持自建中继器
  19. 经典SQL语句大全:http://www.cnblogs.com/yubinfeng/archive/2010/11/02/1867386.html
  20. java十进制转化为二进制

热门文章

  1. 使用SQL语句INSERT输入数据
  2. SOHO如何给产品定价?如何报价?
  3. linux下mysql的创建_linux下mysql创建库命令
  4. 菜单栏中和页面上的SearchView简单使用
  5. django manage.py runserver无法运行
  6. Java 校验EMAIL格式方法,真为正确
  7. java中的mvc和三层结构究竟是什么关系
  8. Ecava Sdn Bhd IntegraXor产品项目信息泄露漏洞
  9. 传球问题-矩阵快速幂
  10. C语言山东春考技能模拟,1-2020年山东省春季高考技能考试信息技术类专业考试(样题)(2).pdf...