到新的项目工作了一个月了。感觉想做的事情很多,又不知道该从何做起。刚来的时候看到遗留的代码,心中还不免嫌弃。但看看这一个月自己写过的代码,也不免偷工减料的地方。通过工作的实践,刚好检验了自己以前的一些想法和认识。有对的地方,也有不对的地方,也有待修正的地方,也有新的收获。而且依靠以前的知识累积,也能很清楚的认识到自己的不足和团队的不足。这是目前最庆幸的地方。
面向对象设计主要有两个功能
- 消除重复,提高代码的复用率(其实函数也行)。看起来也简单
- 利用抽象将代码分层次,分类.使你在编码时可以分离的思考问题.一次只关心代码的一部分逻辑.理解起来也容易。
- 隔离变化,把逻辑相同,即修改原因相同的代码规划在一起,应对变化的需求。改起来更轻松。
正如《代码大全》里面说的,软件开发的核心就是降低复杂度.所以编写代码的准则是 怎么易读 易理解 怎么编写
我也不敢说对面向对象的认识很深刻了,上面很多的内容也是从书上看的。但经过了这一个月的验证。感觉只要你能多用到一点点面向对象的想法,工作就会变的更轻松。对面向对象的另一个认识就是,现实中的需求有时候很复杂。对需求中对象的识别也是一门需要不断磨练的能力。 前面遇到一个任务:将客户填写的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
思路清晰,编写容易。按照新的算法,只要提交的文件是顺序填写的。不管多少个表,中间间隔多少,都可以解析。
最后想说的是,其实数据通过表格导入是很无奈的选择。个人感觉是由于系统不好用所导致。提高了对用户输入的要求,容易降低系统的可使用性,也不容易测试。