小结最近开发的项目 —— Spring + iBATIS(Oracle 11) + Struts 2 框架实现

总结最近开发的项目 —— Spring + iBATIS(Oracle 11) + Struts 2 框架实现

      前一段时间(将近一个半月),自己给公司开发了一个前台商品网站(类似淘宝)和后台管理系统。在项目开发实施过程中碰到不少问题(第一次自己负责项目的整个开发流程),以此总结一下,吸取教训以便获取经验。

  1. 数据库表总行数(countSize)和分页总页数(countPage) 为 long 类型 。刚开始,我用 int 类型来定义它,但由于有些 JavaBean 的 ID 为 long 类型。所以,随着数据量的增大,终究有一天其返回值由于数值溢出 (long 类型自动转化为 int 类型)而导致非常隐蔽的错误。这个对我的印象特别深,一方面是我参与其中的修改,最主要的还是由于项目已到开发后期了,所以该这样的潜在错误可谓“牵一发 而动全身”啊。这涉及到 Action、Service Interface 及其实现类和 iBATIS 的 XML 配置文件,真的感触颇深。
  2. Oracle 表中的字段为 Number 类型时,一定要设置其默认值为 0 。这是我在项目开发过程中发现的,如果不设置默认值,当我们第一次插入后,其值可能为 NULL (如果 JavaBean 对应的属性为 NULL时)。这样我们就不能用 SQL 的 + 操作它 ,这也是一个隐蔽的错误,因为我们没有 DBA。比如要统计一个卖家的成交金额,当我用 + 在 SQL 更新其值时,最后的结果还是 NULL(直接从数据库表查看其值)。
  3. Service Interface 的函数名命名方式,推荐利用上下文定义函数名,名称有清晰且可以避免函数名冗长 。比如 UserInfoService 的 query*-ByConditions 、insert、update*- ByConditions 、delete*-ByConditions 等。例如在该项目用 updateUserinfo ByID 定义根据 ID 更新用户信息,该函数名的 UserInfo 完全可以去掉,因为当我们调用该函数时,肯定要用其接口调用它,这样根据上下文代码足以知道它是操作哪个 JavaBean 的。这是我从著名计算机专家Brian W.Kernighan的畅销作品《程序设计实践(双语版) 》得到的启示。
  4. 客户方让你开发某些功能时,首先必需弄清楚整个功能需求 。比如客户让你实现一个功能,告诉你需要传入开始和结束修改日期(比如要获取 Taobao 的某卖家的新增商品信息)。这时你就要根据淘宝提供的 API 对参数的要求和客户进行沟通。客户方传入的参数开始和结束日期之间的间隔可能是不止一天间隔,可能间隔2天或者5天,而淘宝的 API 要求是传入这两个参数必需在同一天之内。所以,这时你必须处理这样的情况。