码农是怎么提高设计能力的?

企业动态
当我在工作中再次遇到复杂的需求时, 也努力地去做抽象,寻找本质的东西,有一次竟然把业务操作抽象成二维坐标系下点的移动,让我喜不自胜,感受到了抽象的威力。

[[236672]]

 “欣哥,你是怎么提高设计能力的? ”

这个问题最近被人问及, 我回想了下这10多年学习历程,并没有发现一个确切的东西能帮助提升设计能力,更具体点是“面向对象的设计能力”。

我大学的时候学了几门语言,也勉强做了几个项目,但是都停留在能使用的层面,根本没有考虑到可扩展性,重用性,灵活性,易读,优雅...... 等东西, 也不知道什么是设计模式, 估计大部分码农翻身的读者都比我强得多。

刚工作的时候,一个搞Java的同学给我说,刘欣你知道吗,现在模式很流行,我们都在搞模式。

模式? 正在抱微软大腿的我是一脸懵逼。

回去赶紧搜,于是就发现了四人帮那本著名的《设计模式》,赶紧研读,发现是雾里看花,水中望月,看不清楚。

这设计模式就如同一座高山,可望而不可及。 当然用来吹牛还是可以的,吃饭时给组长说:我最近看到一本书,叫设计模式,里边提出了两条原则,实在是太好了。

“什么原则?”

“一条面向接口编程而不是面向实现编程, 另外一条是优先使用组合而不是继承。”

虽然我洋洋得意,但是我心中明白,我也不知道这是啥意思。

后来看到闫宏写的《Java与模式》一书 ,里边举了很多红楼梦的例子,有点意思,大概知道了一些模式的写法。

照葫芦画瓢,写了个Iterator, 激动不已。没成想到JDK中一看,人家早就写好了。

转入Java阵营以后,发现模式在这里确实比较提倡,不仅仅是标准的23种设计模式,还有J2EE开发中用到的各种模式。

那就老老实实地学吧,不仅仅看书,还开始看源码,当时流行的有一个叫做Jive论坛,纯用servlet和JSP写的,现在看来可能是比较幼稚,但是它里边用了很多的设计模式,比如单例,模板方法,代理,迭代器等等。

之前学习设计模式,看到的都是小打小闹的小例子,不知道怎么用到项目中来,现在看到Jive,一下子看到设计模式在实战中的鲜活的应用,实在是大开眼界。

(由于时间太过久远,感兴趣的可以再翻翻Jive,但是不太建议再花太多的时间学习了)

后来发现了一本神书《敏捷软件开发,原则,模式与实践》,***次讲了面向对象设计的原则,其中还有一个薪水支付的案例,真是让我大开眼界,一下子明白了“优先使用组合而不是继承"的道理。

此后又看了JUnit的源码,再次感慨大牛把设计模式玩得炉火纯青。

看了不少书和源码以后,就想在工作中想找机会实战,无奈工作中增删改查居多,在框架下填代码,浑身的OO内力无处宣泄,真是不爽。 (其实也没多少内力,把自己高估了。)

终于逮到一次机会,我负责的模块业务逻辑非常复杂,我就想办法把这一块逻辑从增删改查的框架中剥离处理,好好设计了一番,应用了一些设计模式,效果还不错,基本达到了OCP的原则:对修改封闭,对扩展开放。

各位同学也可以想一想,自己的工作中有没有一些复杂的业务逻辑?能不能把他们单独拎出来做个设计?

再挑战下有难度的源码吧,大家把Spring“吹嘘”得神乎其神,一定得看看, 于是开始进入Spring源码,这绝对是一次痛苦之旅,多如牛毛的class,深不可测的函数调用层次,把人搞得头晕眼花,反复的调试,加上文档的配合,总算走出了黑暗森林,也体会到了Spring设计的一些妙处,尤其是软件开发最最重要的一点: 抽象。

当我在工作中再次遇到复杂的需求时, 也努力地去做抽象,寻找本质的东西,有一次竟然把业务操作抽象成二维坐标系下点的移动,让我喜不自胜,感受到了抽象的威力。

但是这样“顿悟”时刻还是太少了。面向对象的原则S.O.L.I.D 听起来很简单,23种设计模式理解起来也不难,但是想把这些原则和模式在实践中应用好,那可就不容易了,很多时候我在面对复杂问题的时候也是非常犯愁,无法找到合适的接口和抽象,***做出的设计不尽如人意。

总结一下,想提升OO的设计能力,我的经验就是: 阅读书籍, 阅读源码,再加上不断地思考和实践。

谨以此和大家共勉。

【本文为51CTO专栏作者“刘欣”的原创稿件,转载请通过作者微信公众号coderising获取授权】

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2023-03-19 16:15:33

CSS技巧开发

2018-06-20 09:35:43

码农科技开发

2017-11-06 08:27:26

开发

2013-08-22 10:10:31

2015-05-12 10:33:09

程序员代码

2014-04-04 10:27:50

码农工作效率

2020-12-17 10:20:27

码农高薪计算机

2020-08-05 12:27:18

Go语言码农

2012-06-07 09:25:31

Visual Stud

2022-11-30 14:57:39

产业互联网

2016-10-10 20:32:54

WebWindows 10设计

2013-11-14 13:58:06

硅谷码农

2014-12-04 10:02:55

2020-05-08 10:06:12

码农开发行业

2016-04-05 15:23:35

CTO训练营,技术管理

2014-03-20 16:18:30

码农工作效率

2019-10-16 15:54:22

运维架构技术

2020-09-28 07:00:00

单元测试编程语言

2015-05-12 10:15:15

程序员

2023-07-16 22:34:55

点赞
收藏

51CTO技术栈公众号