新公司的一次重构升级
作为菜鸟,进入一个新公司,更多的是怀着学习的态度,期待遇到一个牛逼的大神,带领自己一路披荆斩棘,貌似这个新的环境和自己想的差距有点大~~~
不管环境怎么样,还是从自己开始,希望不能完全压在别人身上。关于新公司的产品的重构,主要从技术角度说一下,尽量剥离公司的业务。新人初来乍到,怎么插入别人正在做的工作呢?说实话很难!所以领导给了一个和别人的工作不交叉(代码上)模块——任务模块!
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
新公司的一次重构升级相关推荐
- 【观察】智能安防的新时代,华为的重构和创新
申耀的科技观察 读懂科技,赢取未来! 毫无疑问,如今的世界正在以加速度进入到智能化时代,特别是各项业务的云化深入以及万物互联,数据处理能力的进一步提升,智能算法一次又一次的突破,以及未来5G在行业中更 ...
- 新公司研发能力低下,何去何从?
我是去年年底辞职的,到了现在的新公司,和我一起进公司的还有个09年毕业的研究生.到了公司不多久,我们就参加到了一个项目研发中,在研发的过程中,我们都发现公司的代码简直就是垃圾: 一:代码的命名很乱,简 ...
- 滴滴自动驾驶部门成立独立公司,CTO张博兼任新公司CEO
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100) 导读:8 月 5 日,滴滴出行官方微信公众号发文,宣布旗下自动驾驶部门升级为独立公司.目前,新成立公司的名称还未曝光,但据官方介绍将 ...
- 当谷歌员工来到新公司的那一天,发现原来公司什么都没有
云栖大会是阿里每年一次的秀肌肉,2020年的云栖大会采用了云上直播,昨天一天把云栖大会的内容整体上算是看了一遍,当然更多是挑着看的,不然太多了.总体的感觉阿里还是国内技术最过硬的公司之一(主要是考虑到 ...
- 刚刚,国家新型互联网交换中心(以及新公司)正式成立!不止于降低网间结算费用...
经过前期的充分调研和去年开始的积极试点,我国在新型互联网交换中心领域取得了阶段性成果--6月30日,国家(杭州)新型互联网交换中心宣布正式启用. 与此同时,由三大运营商.阿里.网易等参股的浙江省新型互 ...
- 选择比努力更重要,面试新公司,从哪些细节能判断公司的前途?项目的好坏?...
点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 很多朋友在入职新 ...
- 互联网晚报 | 3月24日 星期四 | 国务院安委办:立即开展民航安全隐患排查;新东方新公司经营范围含电竞赛事策划...
国务院安委办:立即开展民航安全隐患排查 从应急管理部获悉,日前,国务院安委会办公室.应急管理部联合印发通知,要求各地区.各有关部门和单位以东航"3·21"坠机事故为警示,清醒认识当 ...
- 贾跃亭的造车梦还在继续 旗下FF在国内成立新公司
12月21日消息,贾跃亭旗下的法拉第未来(Faraday Future,简称FF)又有新动作.日前,FF在珠海成立了新公司,注册资本2.5亿美元. 据企业信息显示,法法汽车(珠海)有限公司于2020年 ...
- java如何无感知部署_干货!如何平稳用户无感知的完成系统重构升级
前言 我们在实际开发系统的过程当中,很有可能会遇到需要进行系统重构升级的情况,需要重构的原因可能是之前的设计不合理,导致现在维护起来非常的困难,也有可能是现在的业务发展非常迅速,需要进行分库分表了又或 ...
最新文章
- 获得 DataSet中的记录总数
- C语言二叉树的逆向有序遍历(附完整源码)
- IT自动化:自动化的网络管理变得很重要
- python的for循环累加_在python中将6 for循环累计和矢量化
- 南阳理工计算机全国排名,全国工科实力最强的10所高校排名,
- MySQL-locate()函数
- 联想服务器imm默认地址_命令下配置ip地址
- 小记:《技术进步引发的灵感革命》网易游戏学院第二届公开日
- office系统构架
- 切换网段后,处理用友T6变成演示版故障
- AngularJS 讲解五, Factory ,Service , Provider
- c语言二级考试程序设计题的做题步骤,计算机二级C语言上机考试操作步骤与流程.doc...
- Java项目:SSM校园共享自行车出租管理系统
- Spring学习路线
- 导论计算机论文题目,计算机类论文题目
- win7 设置 快速启动栏
- 奶瓶(beini) 又一蹭网神器 1.2.2增强版带600万密码字典
- 中国程序员开发的远程桌面火了!Mac可用,只有9MB,支持自建中继器
- 经典SQL语句大全:http://www.cnblogs.com/yubinfeng/archive/2010/11/02/1867386.html
- java十进制转化为二进制
热门文章
- 使用SQL语句INSERT输入数据
- SOHO如何给产品定价?如何报价?
- linux下mysql的创建_linux下mysql创建库命令
- 菜单栏中和页面上的SearchView简单使用
- django manage.py runserver无法运行
- Java 校验EMAIL格式方法,真为正确
- java中的mvc和三层结构究竟是什么关系
- Ecava Sdn Bhd IntegraXor产品项目信息泄露漏洞
- 传球问题-矩阵快速幂
- C语言山东春考技能模拟,1-2020年山东省春季高考技能考试信息技术类专业考试(样题)(2).pdf...