大哥们,面向对象设计能力如何提高?

2016-07-24 19:29:28 +08:00
 hujianxin

我学习编程时间也不短了,从 c 语言入门到现在已经两点多了吧。中间学过 Python , Java , Scala 。现在学习以 Java 为主。但是对面向对象还是不能有很好的理解。

例如,我需要完成一个任务,任务是: 将一个文件夹下的所有的 xlsx excel 文件转到 oracle 数据库中。 Java 中的 POI 包可以操作 excel 。 poi 里面有一个 workbook 类。可以操作 sheet , row , cell 等。我觉着抽象程度已经很高了。

在这个任务中,我还需要继续将 excel reader 这个任务继续抽象吗?如果继续抽象改完成什么样的功能设计呢?

虚心求教各位程序员大哥,希望能帮我解答一下疑惑。

另外,除了多写程序以外,还有什么书,网站,能够提高这方面的能力有帮助呢?

4900 次点击
所在节点    程序员
30 条回复
pyufftj
2016-07-24 19:52:17 +08:00
如果你接触一些比较大型的项目就会发现面向对象的优点,对于代码的修改及功能的扩展都要方便的很多。如果你用过程化的方式,就很容易乱作一团。。纯属个人见解。一些简单的任务,面向对象或者过程化是看不出来的。
HypoChen
2016-07-24 20:49:17 +08:00
首先,你需要一个对象(大雾
说正经的,对于设计方面的提高就算是看书什么的也是很难提高的,之前写的代码少,在看设计模式的时候,只知道他好并不知道为啥好,在什么时候能发挥最大的威力。软件设计也是一样,看书啊什么的不建立在大量实践的基础上是很难真正消化的。当你遇到过并实现很多场景,然后再去看那些美妙的设计,会让你有众里寻他千百度的感觉。
所以,现在要做的不是在纠结怎么设计,而是放手去实践吧。
tracymcladdy
2016-07-24 21:02:05 +08:00
面向对象就是个忽悠。
面向接口编程才是正解。
wizardforcel
2016-07-24 21:19:59 +08:00
思想和架构类的书。编程之美、编程珠玑、架构之美、开源软件架构。

另外对于你那个问题, poi 是读取通用 excel 的,但如果有业务上专用格式的 excel ,还可以继续封装。
cs419
2016-07-24 21:52:27 +08:00
实体类有用过吗, list<User>
一条 user 数据作为对象包含了一些属性
user.name user.pwd user.age
jatesun
2016-07-24 22:11:20 +08:00
多敲代码多看书多看源码。。。
Srar
2016-07-25 02:37:09 +08:00
多重构
linux40
2016-07-25 06:53:03 +08:00
uml ?
hujianxin
2016-07-25 06:57:27 +08:00
@pyufftj 有道理,我这种小需求应该还到不了设计的地步
hujianxin
2016-07-25 06:58:18 +08:00
@HypoChen @jatesun 看来只有实践才是捷径啊
hujianxin
2016-07-25 06:59:35 +08:00
@cs419 没有用过这个方式,我不太明白你指的什么呢?能不能再稍微解释一下
hujianxin
2016-07-25 07:17:45 +08:00
@wizardforcel 多谢推荐
russj
2016-07-25 08:56:15 +08:00
这个是用来忽悠老板的
cxh116
2016-07-25 09:09:39 +08:00
先写测试,这样写出的方法会考虑怎么供调用方使用才好。
zeroten
2016-07-25 09:10:42 +08:00
首先要有个对象
gdzdb
2016-07-25 10:18:10 +08:00
多做项目,
在开发中发现问题,自己尝试解决方案,在方案中再找到问题,再优化,形成总结。
看优秀的开源项目的代码,理解代码。
然后再找本关于设计模式的书看看。
eurry
2016-07-25 10:45:01 +08:00
不要迷信什么面向对象
nonesuccess
2016-07-25 10:49:45 +08:00
你的代码里面有重复的部分吗?作为一个有良好习惯的程序员,粘贴代码这样的毛病就当你没有了,那你程序思路上有重复的部分吗?

比如你的 xlsx 格式有若干种,如果你的考虑问题的思路是: 1 、将 xlsx1 中的数据, xx 列复制给表 1 中的 xx 列, xx 列复制给表 1 中的 xx 列, 2 、将 xlsx2 中的数据, xx 列复制给表 2 中的 xx 列……那就没什么重复的部分,就当搬砖继续干去吧。

但是如果你的思路转变为:将每个 xlsx 中的若干列以一定的规则复制到某张表中,那所有的转换逻辑都是重复的部分。你需要封装一个 Strategy 对象,用于表示 xlsx 和数据库表的对应规则,以及列的转换规则,然后外层调用的时候统一代码,不同的 xlsx 只需要传入不同的 strategy 就可以了。


第二就是,你的代码将要应对什么样的变化。

比如明天就可能把 oracle 换成 mysql 了,那就要封装一个 dbDriver 出来。当然这件事 jdbc 已经帮你做了,不过具体到你的业务场景中,很可能不同的数据库有不同的转换逻辑,比如日期类型的字段在 mysql 中要转换为 date ,在 oracle 中要转换成 datetime 之类的。这样的话,你再自己封装一层比较好。
techmoe
2016-07-25 11:52:12 +08:00
首先你要有对象()
pyufftj
2016-07-25 12:11:04 +08:00
@zeroten 我一天可以 new 100 个

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/294598

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX