1个月工作总结
发布于 02 Jul 2014
work summary

到新的项目工作了一个月了。感觉想做的事情很多,又不知道该从何做起。刚来的时候看到遗留的代码,心中还不免嫌弃。但看看这一个月自己写过的代码,也不免偷工减料的地方。通过工作的实践,刚好检验了自己以前的一些想法和认识。有对的地方,也有不对的地方,也有待修正的地方,也有新的收获。而且依靠以前的知识累积,也能很清楚的认识到自己的不足和团队的不足。这是目前最庆幸的地方。

面向对象设计主要有两个功能

  1. 消除重复,提高代码的复用率(其实函数也行)。看起来也简单
  2. 利用抽象将代码分层次,分类.使你在编码时可以分离的思考问题.一次只关心代码的一部分逻辑.理解起来也容易。
  3. 隔离变化,把逻辑相同,即修改原因相同的代码规划在一起,应对变化的需求。改起来更轻松。

正如《代码大全》里面说的,软件开发的核心就是降低复杂度.所以编写代码的准则是 怎么易读 易理解 怎么编写

我也不敢说对面向对象的认识很深刻了,上面很多的内容也是从书上看的。但经过了这一个月的验证。感觉只要你能多用到一点点面向对象的想法,工作就会变的更轻松。对面向对象的另一个认识就是,现实中的需求有时候很复杂。对需求中对象的识别也是一门需要不断磨练的能力。 前面遇到一个任务:将客户填写的excel的内容导入到数据库,然后展示到页面上。excel内容大致如下。


单位:123

公司:321

| 我是  | 标题 | 我是    | 动态的列  |
|-------|:---:|-----------|-------:|
| rhio  | 1 | robot     | 3000 |
| haroo | 3  | bird      | 430   |
| 我 | 是   | 动态 | 的行     |

最初的想法是按位置去解析。比如说从左上角开始找,找到”单位“解析内容123。接着下一行是”公司“内容321。接着下两行,解析标题。接着下两行开始解析数据。许久没写了,poi也是现学现卖。啃哧啃哧写了好久,大致能跑通了。还没高兴多久,需求人员过来说可能有多个文件,多个sheet,一个sheet里可能有多个表。+_+前面的还好说,最后一个问题如果用我这种写法去解析一想就头晕。我一想不科学啊,肯定有更好的办法。然后仔细观察了下这个文件的结构。是有规律的,顺序的。突然,让我联想到前些时候读过的一篇文章中讲到的有限状态机模式。于是新的算法产生了,大致如下:


定义一个变量parseState最好是用枚举类型,初始状态init。还是从左上角开始扫描单元格。
loop excel
if parseState=init
  解析单位
  将parseState置为cop
else if parseState=cop
  解析公司
  将parseState置为title
else if parseState=title
  解析标题
  将parseState置为data
else if parseState=data
  根据动态表头解析表格
 	  将parseState置为init
end loop

思路清晰,编写容易。按照新的算法,只要提交的文件是顺序填写的。不管多少个表,中间间隔多少,都可以解析。

最后想说的是,其实数据通过表格导入是很无奈的选择。个人感觉是由于系统不好用所导致。提高了对用户输入的要求,容易降低系统的可使用性,也不容易测试。