LM**项目开发感悟
关键词:立马 程序流程图 死循环 内存分配 细节 数据表批量写入
经过一个多月的项目开发,自己主要负责服务端业务逻辑的实现。服务端采用纯servlet完成,自己是在已有的项目架构上进行编程,对于所使用的架构,自己还没有认真的研究过,但明白其用到了类似于hibernate反向工程的思想。通过配置文件,便可以生成对应于数据库中已存在数据表的操作方法。关于数据的各种操作,项目架构中也已经得到很好的实现,自己在编写业务逻辑时,只需要利用相应类所对应的方法即可。
在项目完成后,自己还是需要研究其框架是如何搭建的,这对于自己以后的编程会有很大的帮助。通过项目实战,自己感触、领悟了许多,总结如下:
1. 遇到较复杂业务逻辑时,可以尝试画一下程序流程图(程序流程图绘制工具visio资源免费下载地址:)。通过绘画流程图,你就可以对程序的执行逻辑有个较为清晰的认识。绘制程序流程图的好处还在于可以使项目实现代码规范、自解释、简洁、逻辑清楚、性能优越等等亮点。项目中所使用的药店选择3003流程图示例如下:
2. 有时自己的程序会陷入死循环中,解决这种问题的一种有效方法就是调试。通过调试,一步步的你就会发现到底是在哪里出现了死循环,进而可以解决问题。
3. 又犯了之前的错误,将JSONObject jsonObj = new JSONObject();这条语句置于for循环之外,会出现for循环结束后面执行jsonArray.put(jsonObj);时,导致添加进JSONArray数组的元素均为最后一次添加的jsonObj,原因就是将新建jsonObj的语句置于循环之外,只是在内存块中新开辟了一块内存,假设地址为0x31,进行put操作时,添加的均为开辟地址为0x31的内存块,故最后json数组的元素内容均相同。
其在内存中的分配情况大致如下图所示:
4. 细节性的地方还是需要自己慢慢积累编程经验的。例如,客户端传过来一个String类型的数据,经过http传输到达服务端变为int类型,就需要自己将其进行转换,代码为
String classid = String.format("%02d", request.getInt("classid")); //分类编号
logger.info("classid="+classid);
String类的format方法可以很好的解决此问题。
5. 数据表定时批量数据写入存在一个延时的问题,也就是说,在执行完此操作后,立即查看数据表中新插入的数据是查看不到的,需要间隔一段时间才可以,至于为什么,应该与mysql的机制有关系。
6. jdk1.6在switch语句中变量不能为String类型,可以为int类型。jdk1.7兼容两种类型格式。
7. 图片的存放所应用的方法是通过tomcat的虚拟目录的形式设置在固定位置而不在工程目录下。因为文件目录files里面的内容是动态的,经常要上传照片等,为了避免新程序发布时将其覆盖,如下配置:
server.xml
<Context path="/lmapp/files" docBase="C:\\lmapp" reloadable="true" debug="0">
</Context>
后台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.118:8088/lmapp/files/”
8. 更改数据访问数据表时必须采用加锁的形式,只有查询数据时才可以不加锁的形式访问。
9. 用户注册时输入的信息校验,例如手机号,密码长度、类型均应在客户端实现,而不应该是客户端提交给服务端后,在服务端检验,若发生错误,则返回错误信息,这种设计逻辑是错误的。当然了,另一方面,可以做到双重校验也是合理的。
10. 对于其中用到的知识点自己还是需要深入理解学习的。
项目开发进行中,未完待续.....
- 点赞
- 收藏
- 关注作者
评论(0)