漫谈程序员(六)公司项目开发感悟

LM**项目开发感悟

关键词:立马  程序流程图  死循环  内存分配  细节  数据表批量写入

经过一个多月的项目开发,自己主要负责服务端业务逻辑的实现。服务端采用纯servlet完成,自己是在已有的项目架构上进行编程,对于所使用的架构,自己还没有认真的研究过,但明白其用到了类似于hibernate反向工程的思想。通过配置文件,便可以生成对应于数据库中已存在数据表的操作方法。关于数据的各种操作,项目架构中也已经得到很好的实现,自己在编写业务逻辑时,只需要利用相应类所对应的方法即可。

在项目完成后,自己还是需要研究其框架是如何搭建的,这对于自己以后的编程会有很大的帮助。通过项目实战,自己感触、领悟了许多,总结如下:

1. 遇到较复杂业务逻辑时,可以尝试画一下程序流程图(程序流程图绘制工具visio资源免费下载地址:)。通过绘画流程图,你就可以对程序的执行逻辑有个较为清晰的认识。绘制程序流程图的好处还在于可以使项目实现代码规范、自解释、简洁逻辑清楚性能优越等等亮点。项目中所使用的药店选择3003流程图示例如下:

漫谈程序员(六)公司项目开发感悟_第1张图片

2. 有时自己的程序会陷入死循环中,解决这种问题的一种有效方法就是调试。通过调试,一步步的你就会发现到底是在哪里出现了死循环,进而可以解决问题。

3. 又犯了之前的错误,将JSONObject jsonObj = new JSONObject();这条语句置于for循环之外,会出现for循环结束后面执行jsonArray.put(jsonObj);时,导致添加进JSONArray数组的元素均为最后一次添加的jsonObj,原因就是将新建jsonObj的语句置于循环之外,只是在内存块中新开辟了一块内存,假设地址为0x31,进行put操作时,添加的均为开辟地址为0x31的内存块,故最后json数组的元素内容均相同。

 漫谈程序员(六)公司项目开发感悟_第2张图片

其在内存中的分配情况大致如下图所示:

漫谈程序员(六)公司项目开发感悟_第3张图片

4. 细节性的地方还是需要自己慢慢积累编程经验的。例如,客户端传过来一个String类型的数据,经过http传输到达服务端变为int类型,就需要自己将其进行转换,代码为

String classid = String.format("%02d", request.getInt("classid")); //分类编号

logger.info("classid="+classid);

String类的format方法可以很好的解决此问题。

5. 数据表定时批量数据写入存在一个延时的问题,也就是说,在执行完此操作后,立即查看数据表中新插入的数据是查看不到的,需要间隔一段时间才可以,至于为什么,应该与mysql的机制有关系。

6. jdk1.6switch语句中变量不能为String类型,可以为int类型。jdk1.7兼容两种类型格式。

7. 图片的存放所应用的方法是通过tomcat的虚拟目录的形式设置在固定位置而不在工程目录下。因为文件目录files里面的内容是动态的,经常要上传照片等,为了避免新程序发布时将其覆盖,如下配置:

server.xml

后台Const:

ROOT_FILE_PATH=C:\\lmapp指向路径

前台web:

ROOT_FILE_PATH=/lmapp/files/

为了刷新方便,设ROOT_FILE_PATH2=/lmapp/files\\;

APP:

ROOT_FILE_PATH=http://192.168.1.1188088/lmapp/files/

8. 更改数据访问数据表时必须采用加锁的形式,只有查询数据时才可以不加锁的形式访问。

9. 用户注册时输入的信息校验,例如手机号,密码长度、类型均应在客户端实现,而不应该是客户端提交给服务端后,在服务端检验,若发生错误,则返回错误信息,这种设计逻辑是错误的。当然了,另一方面,可以做到双重校验也是合理的。

10. 对于其中用到的知识点自己还是需要深入理解学习的。

 项目开发进行中,未完待续.....

你可能感兴趣的:(IT,Essays)