当前位置: 首页 > 后端技术 > PHP

老项目重构笔记:用户系统

时间:2023-03-29 19:35:19 PHP

受邀重构公司老项目概览。重构首先要注意几点。重构后,功能的可扩展性、业务相互依赖的复杂性都被重构了,没有了自己的业务。重构后代码可读性和可维护性性能的提高未实现。至于重构的真正原因还不清楚。用户注册数:107470天PV:1000+非常惨淡。用户ID与其他业务的绑定只是简单的存储用户ID进行绑定,类似评论,购买等,这样在重新设计用户的时候就不需要考虑其他表的业务是否有冲突或者依赖桌子。早期设计的时候好像是界面和数据表字段设置有问题,有数据重复的问题。功能改写后,数据迁移方便。当然,手动操作是不行的,迁移php脚本也不现实。考虑使用数据队列等方式进行数据迁移。加倍。原数据表结构部分字段字段名类型为空默认值注释MemberIdbigint(20)Y自增码MemberPhonevarchar(255)N''手机号LoginTimeint(11)YNULL登录时间QuitTimeint(11)YNULL退出时间LoginStatetinyint(2))YNULL登录状态MemberStatetinyint(2)N0账号状态MemberExperttinyint(2)N0MemberRegTimeint(11)YNULL注册时间DeviceTokenvarchar(255)YNULL设备标签WxTokenchar(32)YNULL微信标签问题点下面的数据字段在设计中不要用到name要小写,_要分开使用,比如member_tel。索引设置也存在一些问题。尽量避免DEFAULTNULL,按要求分表。现在所有的第三方授权都放在一张表里。预选重构要求Befast。所以只选择世界上最好的语言。语言:PHP框架:Laravel数据库:MySQL考虑到数据量不小,无法手动操作,选择使用RabbitMQ进行数据迁移新建表设计用户表CREATETABLE`member`(`id`bigint(20)unsignedNOTNULLAUTO_INCREMENT,`tel`bigint(20)DEFAULTNULLCOMMENT'手机号码',`password`varchar(255)COLLATEutf8mb4_unicode_ciDEFAULTNULLCOMMENT'登录密码',`status`tinyint(4)NOTNULLDEFAULT'0'COMMENT'帐户状态0:正常',`created_at`timestampNULLDEFAULTNULL,`updated_at`timestampNULLDEFAULTNULL,PRIMARYKEY(`id`),UNIQUEKEY`member_tel_unique`(`tel`),KEY`member_tel_status_index`(`tel`,`status`))ENGINE=InnoDBAUTO_INCREMENT=80073DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;用户授权表CREATETABLE`member_authorized`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`member_id`bigint(20)NCOMMENT'用户代码',`prefix`varchar(25)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'第三方name',`token`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'thirdpartyflag',`data`textCOLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'授权用户信息',`created_at`timestampNULLDEFAULTNULL,`updated_at`timestampNULLDEFAULTNULL,PRIMARYKEY(`id`),KEY`member_authorized_prefix_index`(`prefix`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;用户信息表CREATETABLE`member_data`(`member_id`bigint(20)NOTNULLCOMMENT'用户代码',`sex`enum('0','1','2')COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'性别0=>girl1=>boy2=>unknown',`nick_name`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'name/nickname',`img`varchar(255)COLLATEutf8mb4_unicode_ciNOTNULLCOMMENT'useravatar',`created_at`timestampNULLDEFAULTNULL,`updated_at`timestampNULLDEFAULTNULL,UNIQUEKEY`member_data_member_id_unique`(`member_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci;可以通过laravel内置的队列来选择队列,Rabbitmq可以将数据迁移到新表中。当然你需要选择一个流量最低的时间段。并不是凌晨的时间少,不同行业的活跃时间段不同。建议先使用百度统计、腾讯分析等查看活跃时间间隔。迭代重构不是说说而已,几行代码或者大佬的方案就可以解决。实际重构也是一个开发过程。在不断的迭代中,将重构完成的部分加回业务中。感谢您阅读到这里,希望本文能对您有所帮助。有什么问题欢迎在评论区留言。