入职之后发现代码居然是祖传代码肿么办?(SSH->微服务)

本文讲述了如何处理公司的“祖传代码”问题,通过重构策略将SSH框架的模块转变为微服务架构,实现功能泛化、完善和性能提升,同时介绍了数据库同步的不同方法。

 🐓 序言

什么是“祖传代码”?

“祖传代码”通常指的是那些历史悠久、经过多代程序员修改和维护的代码库。这些代码库可能包含大量的历史遗留问题、复杂的业务逻辑和难以理解的代码结构,因此经常被认为是程序员接手项目时的一个巨大挑战。

 🐓 故事分享

我刚入职的时候公司让我去做一个功能模块的性能优化,当我把那个模块down下来的时候,我发现公司这个模块的代码上次修改时间是2016年的“远古版本”,我心想使用的肯定不是微服务,再仔细一看,好家伙还不是SSM框架,就知道这次遇到硬茬了,最后实锤是“SSH框架”,只能说单走一个6。

 🐓 祖传代码与现代开发的融合

重构目标

主要是确定本模块重构的目标,也就是通过重构,将达到什么样的结果。目标的制定也变的很重要。

1.功能泛化:即让相同的接口支持更加通用的功能,比如将代扣和充值功能完善并重构为支付产品商务系统,建立支付商品,出入库,订单等子系统。

2.功能完善:对现有功能进行完善, 将原来未实现的功能补充完成。 比如建立和完善账户系统,为清结算工作提供支持。

3.性能提升:这是最容易说服人的一个理由了。 比如:在存储上,调整原依赖单一依赖mysql数据库的问题,接口可以根据需求选择合适的数据库,实现读写分离,比如对高性能需求的接口采用内存数据库。

重构策略

重构如同飞行中更换引擎,必须非常小心,我们采取的策略是:小步快跑,积小

我编码器代码写好了呀,只要循迹的代码,可以给你先看看void encoder_update(void) { enco_l_last=enco_l; enco_r_last=enco_r_last; enco_l=0; enco_r=0; speed_l=enco_l_last/20/3.14159/65*13*28; speed_r=enco_r_last/20/3.14159/65*13*28; } void GROUP1_IRQHandler(void) { //获取中断信号 gpioA = DL_GPIO_getEnabledInterruptStatus(GPIOA,ENCODER_E2A_PIN); gpioB = DL_GPIO_getEnabledInterruptStatus(GPIOB,ENCODER_E1A_PIN); //ENCODER RIGHT if((gpioA&ENCODER_E2A_PIN)!=0) { if(!DL_GPIO_readPins(ENCODER_E2B_PORT,ENCODER_E2B_PIN)) { enco_r++; } else { enco_r--; } DL_GPIO_clearInterruptStatus(GPIOA, ENCODER_E2A_PIN); } //ENCODER LEFT if((gpioB&ENCODER_E1A_PIN)!=0) { DL_GPIO_clearPins(GPIO_LED_PORT,GPIO_LED_PIN_0_PIN); if(!DL_GPIO_readPins(ENCODER_E1B_PORT,ENCODER_E1B_PIN)) { enco_l++; } else { enco_l--; } DL_GPIO_clearInterruptStatus(GPIOB,ENCODER_E1A_PIN); } } void TIMER_0_INST_IRQHandler(void) { switch (DL_TimerA_getPendingInterrupt(TIMER_0_INST)) { case DL_TIMERA_IIDX_ZERO: // 处理计数到零的中断 encoder_update(); break; default: break; } } 不过我编码器那里怎么和pid结合也不太懂,看了一天真的不懂,我学长给我了一段祖传pid代码/*! * @brief PID * @since v1.0 * *pid: PID参数 * NowPlace:当前位置 * Point: 预期位置 */ void PID_Init(PID *pid, float p, float i, float d, float limit){ pid->P = p; pid->I = i; pid->D = d; pid->limit = limit; pid->realize = 0.0f; pid->Current_Error = 0; pid->Last_Error = 0; pid->Previous_Error = 0; pid->Increase = 0; } // 位置式PID控制 float PID_Realize(PID *pid, float NowPlace, float Point) { float iError; // 当前误差 float Realize; //实际输出 iError = Point - NowPlace; // 计算当前误差 pid->Current_Error += pid->I * iError; // 误差积分 pid->Current_Error = pid->Current_Error > pid->limit?pid->limit:pid->Current_Error;//积分限幅 pid->Current_Error = pid->Current_Error <-pid->limit?-pid->limit:pid->Current_Error; Realize = pid->P * iError //比例P + pid->Current_Error //积分I + pid->D * (iError - pid->Last_Error); //微分D pid->Last_Error = iError; // 更新上次误差 pid->realize = Realize; if(pid->limit<pid->realize) pid->realize = pid->limit; else if (-pid->limit>pid->realize) pid->realize = -pid->limit; return pid->realize; // 返回实际值 } /*! * @brief 增量式PID * @since v1.0 * *pid :误差参数 * *pid: PID参数 * NowPlace:实际值 * Point: 期望值 */ //增量式PID电机控制 float PID_Increase(PID *pid, float NowPlace, float Point) { float iError; //当前误差 float Increase; //最后得出的实际增量 iError = Point - NowPlace; // 计算当前误差 Increase = pid->P * (iError - pid->Last_Error) //比例P + pid->I * iError //积分I + pid->D * (iError - 2 * pid->Last_Error + pid->Previous_Error); //微分D pid->Previous_Error = pid->Last_Error; // 更新前次误差 pid->Last_Error = iError; // 更新上次误差 pid->Increase = Increase; pid->realize = pid->realize + Increase; if(pid->limit<pid->realize) pid->realize = pid->limit; else if (-pid->limit>pid->realize) pid->realize = -pid->limit; return pid->realize; // 返回实际值 }
最新发布
07-14
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆企鹅仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值