51

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

 5 years ago
source link: http://www.10tiao.com/html/151/201807/2665514817/1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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


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


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


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


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


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


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


“什么原则?”


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


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


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


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


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


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


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


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


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


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


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


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


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


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


(插播一则广告,老刘的《从零开始造Spring》课程还在进行中,感兴趣的猛戳这里


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


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


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


谨以此和大家共勉。


(完)

你看到的只是冰山一角, 更多精彩文章,请移步《2016文章精华》或者《2017文章精华


码农翻身

用故事讲述技术


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK