“供应链管理系统”项目阶段性总结

       本项目已经开发近一个月(2018.11.04开始),个人认为项目进度已经到了70%,基本实现主要的功能模块,后续30%的工作主要是测试+改bug。在这项目中,我负责的流程主要包括但不仅限于:仓库盘点、门店盘点,门店退货,门店废弃、采购、采购退货。期间我遇到了很多很多bug,所以在这里进行一个阶段性的总结。既是对过去问题的回顾和思考,也是把开发经验记录下来,以后真正能为我所用。

1.编程思想

1.高复用、低耦合:将一个复杂的业务流程分成一个个小的模块(函数),写成一个个TODO,让相应的类去实现,最后再像积木一样拼起来。

2.不要过度封装:在封装时,不要封装个性化的东西,满足当前功能的同时还要满足扩展性。只封装多次重复使用的代码,不要为了封装而封装。

2.mysql数据库

1.同一类型&含义的字段要统一名称,有利于开发。例如:退货项、采购项、盘点项 字段应该统一名称叫做item。

2.造假数据时,要保证所有类型的假数据都涉及到,并且是多个,同时数据要容易识别,比如:姓名就填一个人名,不要填123

3.每张表必有的6个字段:UUID、创建时间、修改时间 、创建人id、修改人id、备注。

4.把一张表的数据批量导入另一张表中:

类别一:两张表的字段一致:INSERT INTO 目标表 SELECT * FROM 来源表;

类别二:表结构不同/只导入指定字段:INSERT INTO 目标表 (字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源表;

5.涉及到数据库的改动,一一记录到sql包中的sql文件中,sql文件命名规则:2018120101_zjq_tablename_insert.sql

即日期和当日编号_作者_表名_操作.sql。

3.代码编写

1.声明类、函数时一定要写注释!包括但不仅限于:作者@author、日期@date、形参含义@param、返参含义@return、函数功能、作用范围等。

2.声明函数时,设置形参类型往"大"写,使得函数有良好的扩展性。例如:当前函数只需要用到id,我们将整条信息Record都传进去,日后想要拓展功能时直接从Record里取就可以了。共性核心方法+个性重载

3.要有一套统一、完整、规范的方法名,例如:增加为add(),修改为update(),删除为delete(),查单个为findOne(),列表查询为list(),分页列表查询为query(),批量的再在最前面加batch等等。

4.和前端约定的参数名一定要能够“望文生义”,最重要的是不能只有部分含义!例如:库存分门店库存和仓库库存,一定要在最开始时就设定门店库存id为store_stock_id,仓库库存为warehouse_stock_id。而我在最开始只用到门店库存时用stock_id代表,后续两个都用到时就不好区分了。

5.涉及到复杂的业务流程,要使得流程变得可配置:首先建一张流程信息表存储各个流程先后顺序,写一个ProcessConstants类来获取各个流程先后顺序,在相应的流程类中写一个函数进行流程控制,通过识别不同的状态参数(表示处于哪个阶段)调用相应的函数(一个阶段一个函数)。

6.hashMap和hashSet的使用区别:https://blog.csdn.net/Cary_1029/article/details/84558794

7.Array与ArrayList的使用区别:https://blog.csdn.net/Cary_1029/article/details/84500938

8.解决java.sql.SQLException: Incorrect string value: '\xAC\xED\x00\x05sr...' for column 'material_items'

   详情请看:https://blog.csdn.net/Cary_1029/article/details/83959546

9.只在有可能为空的情况下判空,不可能为空的情况不需要判空!

10.涉及到字段存储json时,回显给前端的数据统一为json字符串转成的json对象,前端返给后台的统一为json对象。ps:在本次开发中,有好些地方没统一,有的传的是json对象,有的是从json对象中提出的数组,给开发造成了不必要的麻烦。

11.字符串拼接优先用StringBuilder(线程不安全,速度最快),其次是StringBuffer(线程安全,速度较慢)。

详解请看:https://blog.csdn.net/Cary_1029/article/details/84712544

12.Token既可以基于Cookie实现,也可以基于Session实现。应用场景:登录验证、单点登录、防止表单重复提交等等。

JFinal实现Token:https://blog.csdn.net/Cary_1029/article/details/84721470

13.阿里fastjson和谷歌net.sf.json的选择与使用:在本项目中,我们使用的是fastjson,当然,现在大部分开发用的也是阿里的fastjson。所以我在这里总结一下fastjson的常用方法:https://blog.csdn.net/Cary_1029/article/details/84720936

net.sf.json的使用可以参考这里:http://www.cnblogs.com/wangzhengyu/p/9907917.html

14.JFinal Record<->Map :https://blog.csdn.net/Cary_1029/article/details/84721372
15.Java BigDecimal详解:https://www.cnblogs.com/LeoBoy/p/6056394.html 

16.Tomcat启动时将所有字典值读取到内存中,存到一个Map里。这样使得后端新增字典值、前端获取字典值特别方便。

具体样例参考:本项目的ProcessConstants,ProcessConfigService,config.afterJFinalStart()。

下载成功/失败:判断流是否成功;下载文件是否正确:比对文件MD5码(待做)

JFINAL不是IOC(待理解)

打印PDF(待做)

导入导出Excel(待做)

登录(待做)

猜你喜欢

转载自blog.csdn.net/Cary_1029/article/details/84641920
今日推荐