对公司产品的重构想法

# 对公司产品的重构想法

最近算是完整的参与了人生中的第一个大型项目:一个监控行业的产品,界面上大概有15个大模块。

产品本来就算是一个半重构的项目,以前是c++、python混杂着写的,现在web基本都改成了python
本来是准备采用flask写,但是当时领导坚持要使用C++调用python的方案,但是C++的web不支持
WSGI或ASGI协议,最后自己手搓了一个Mxsoftpy框架。

# 项目代码结构

  • 现在的代码结构问题
    之前没有做过这种大型项目,建立项目的时候还是按照以前的想法建的
pyweb
    db
    model
    server
    utils
    view
1
2
3
4
5
6

然后view、server、model、db分别建立了各个模块的文件夹 如果开发人员少这个目录还可以,互相调用也还算清晰。 但是开发人员多,而且还出现同一模块换人写,写代码和改bug的人不同的现象。 然后数据权限也调整了好几次,还需要兼容两个平台的不同权限融合(我们作为一个模块融合到别人公司的平台), 产品代码已经出现混乱的迹象了。

  • 新的代码结构
pyweb
    xxx(各模块文件夹)
        interface      提供给内部的功能接口,入参和出参都严格使用model
        db             严格限制对每个实体至少拥有一套curd方法,按照实体区分类
        model
            entity     实体模型
            in         请求参数模型
            out        返回数据模型
            interface  接口模型(in、out)
        server         
        view           注释中添加接口文档
    utils
1
2
3
4
5
6
7
8
9
10
11
12

# 权限封装

现在的权限入口过多,设备、用户两边都提供了很多权限接口,除用户模块外,其他模块应该只需要数据权限

# 接口

开发的时候太赶,模块之间的方法复用基本没有,db和model各自写各自的
优化原则:

  • db层统一复用,各模块实体的增删改方法只写一次
  • view的接口数据需要数据校验(请求数据严格序列化、响应数据推荐序列化)
  • 需要跨模块调用的逻辑在interface中写一份
  • 禁止一个url写多个逻辑,前端在不同模块调用类似功能的url时,写成多个,不要凑活改
  • interface层的方法注释写完整(方法使用、参数模型类、返回数据模型类)

# 数据存储、模块间数据联动

  • todo 业务数据增删除(特别是实体)会影响到多个模块,详细排查这些隐患
  • 严格的统一数据库字段命名风格,实体统一使用is_del,关系统一直接删除
  • 当前数据库存储结构正常,无需改动

# 异步支持

接口已经支持async,重构时可以改为异步

# 日志

尽管我已经多次强调日志,仍有info和debug不分,日志信息记录不详细等情况,甚至有些人员调试只依靠Mxsoftpy的全局异常捕获, 记录时需要认真思考(自己根据此条日志能否排查问题)

最后更新时间: 2022/11/26 14:40:53