成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

寫了這么多年代碼,你真的了解設計模式么?

開發 開發工具
面向對象原則,設計模式,簡單設計,重構到模式……看起來都是常規操作,但你有想過他們的關系么?

面向對象原則,設計模式,簡單設計,重構到模式……看起來都是常規操作,但你有想過他們的關系么?

[[245292]]

忍不住要山寨一段《寫了這么多年代碼,你真的了解SOLID嗎?》中的發言:

上面提到的每一項大家都耳熟能詳,但我發現大部分開發者并沒有真正理解。要獲得***收益,就必須理解它們之間的關系,并綜合應用所有這些原則。只有把它們作為一個整體,才可能構建出堅實(Solid)的軟件。遺憾的是,我們看到的書籍和文章都在羅列每個原則,沒有把它們作為一個整體來看,甚至提出這幾項的知名大叔們也沒能講透徹。因此我嘗試介紹一下我的理解。

面向對象原則(OO+SOLID )

偷懶一下,請大家移步,直接參考文章《寫了這么多年代碼,你真的了解SOLID嗎?》,記得回來呦~

簡單理解,面向對象原則給我們提供了一系列面向對象上下文下的***實踐,指導原則和***目標,符合這些原則可以幫助我們***化OO的威力。

如果把面向對象類比成軟件開發領域的一個武林門派,面向對象原則就是這個門派的***心法和目標,打個比方,有點像:心與意合,意與氣合,氣與力合,肩與胯合,肘與膝合,手與足合……這種。

心法這種東西就是神神秘秘的,真正看起來也簡單,字面上也不難理解,很容易用它來挑戰別人:“你看你看,你沒有做到手與足合!”

但是回到自己,要想做到就難了,知易行難!

歸其原因它雖然提供了目標和評價標準,使我們很容易拿他來評價別人,但并沒有告訴我們自己如何才能達到這樣的目標和標準。

[[245293]]

設計模式(Design Pattern)

那設計模式是什么?

很多人,包括我在內,都曾迷陷于23種設計模式之中,初識設計模式,贊嘆于其精妙,就像個萌新的江湖小生,偶然間掉到個山洞,一下就集齊了威震江湖的“7種武器”。

然后……就開始了用長生劍切菜,用碧玉刀削瓜的“幸福生活”,不但把簡單的事情搞得巨復雜,最不能忍的是還暴殄天物!

回到設計模式,無非是在面向對象原則這些虛無縹緲的“心法”指導原則下,那些前輩大神們留下的“招式”或是“套路”而已。但招式和套路并不能致勝,它只是為我們這等小白提供了一個接近大神,理解心法的途徑而已,通過長年累月的模仿去反思去領悟去體會“心法”的本質和精妙,此時腦中不禁浮現《少林寺》中李連杰夏練三九冬練三伏的畫面……

這就能解釋為什么使用同樣的招式,大神們總能一擊致命,而我們卻總是被按倒在地摩擦的原因了。

簡單設計(SimpleDesign)

設計模式是套路和招式,那簡單設計是什么?

首先要區分一下簡單設計和容易設計:

簡單的反義詞是復雜,容易的反義詞是困難。簡單不等于容易,追求簡單的過程往往很困難,如果只是追求容易的往往導致系統過于復雜。

這是好多年前一位同事提到過的一句話,很在點兒上,我們經?;煜撕唵魏腿菀祝瑢τ谶@點,另一位同事之前也寫過一篇文章來闡述做到“簡單”的“困難”。

做為結果的簡單設計是這么一種設計,它能被幾乎所有人理解, 但只有極少數人能做出. 或者反過來說也可以. 簡單設計是一種只有極少數人能做出的設計,但設計一旦做出后,能被所有人理解。

可見簡單設計是一種只有極少數人能做出的設計,那我們怎么才能成為那“極少數人“呢?

對此,Kent Beck給出了清晰的答案:

  • 通過所有測試(Passes its tests)
  • 盡可能消除重復 (Minimizes duplication)
  • 盡可能清晰表達 (Maximizes clarity)
  • 更少代碼元素 (Has fewer elements)
  • 以上四個原則的重要程度依次降低。

這組定義被稱做簡單設計原則。

我們不具體探討這幾個原則,回到最初的問題,如果說面向對象原則是”心法“是”目標“,設計模式是前輩們沉淀下來的”套路”和“招式“的話,那簡單設計是什么呢?

我覺得就是實戰指導原則,他可以讓我們不局限于哪些經典的過往的招式,跳出套路,無招勝有招。

[[245294]]

如果說設計模式是一種自上而下,通過不斷模仿前輩大神套路達到目標的一條道路的話(有招勝無招);那簡單設計原則則是另一條自下而上,忘掉招式和套路,遵循簡單的基本原則,隨機應變,不斷演進,不斷浮現,逐步逼近目標的另一條道路(無招勝有招)。

但,記住,殊途同歸。

好,這位客官問了,那兩條道路都可以幫我們掌握武功***的心法的目標,我走哪條呢?如果我已經會了一條,還需要學習另一條路徑么?

重構到模式(Refactor to DesignPattern)

說到這里,就不難理解“重構到模式”到底在說什么了吧。

它無非是在解釋如何通過自下而上應用簡單設計原則,運用重構的技術和手法,浮現出設計模式。我管這個過程叫“重走長征路”,重新體驗一下那些大神前輩們創建發現設計模式的過程。

這個過程也再次證明了這兩條通往同一個目標的不同的道路也是可以相互轉換的,它們只不過是面向對象原則下的兩種不同形式的表現而已。

如果說“設計模式”是“有招勝無招”,“簡單設計”是“無招勝有招”的話,那“重構到模式”就是“無招生有招”的過程。

總結

總的來說,我們可以把這幾個概念作為一個整體框架來思考。

“面向對象原則”是OO領域的***目標,是面向對象這門武功的心法,很容易用來評判別人,但是自己卻很難達到。

為了能達到心法的境界,之前的各任掌門大神們總結并留下了一些套路和招式,什么降龍十八掌之類的,讓我等晚輩可以通過日復一日的刻意練習,去不斷參透心法的真諦,這些套路和招式就是“設計模式”。

但只有這十八招顯然是不夠的,于是我們又學到了一些實戰指導原則,讓我們以另一種方式,自下而上,跳出招式和套路的限制,甚至能不斷浮現出新的招式,且通向的是同一個目標,這些實戰指導原則就是“簡單設計原則”。

***,不斷操練“重構到模式”,通過實際運用實戰指導原則和手法,推演招式和套路,幫助我們將這兩種方法融會貫通,相互結合,最終領悟那隱藏在一切表象背后的真理,達到無招勝有招,草木竹石皆可為劍,心隨意走,人隨心動的境界。

【本文是51CTO專欄作者“ThoughtWorks”的原創稿件,微信公眾號:思特沃克,轉載請聯系原作者】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2018-10-06 21:51:37

代碼SOLID編程

2024-02-20 08:09:51

Java 8DateUtilsDate工具類

2017-11-30 07:30:27

程序員代碼軟件世界觀

2020-07-03 08:11:33

代碼登錄方式

2020-01-06 08:40:42

Windows 10Windows超強模式

2021-03-24 08:44:11

代碼內存消耗語言

2021-06-09 10:10:20

代碼內存編程語言

2021-02-03 08:24:32

JavaScript技巧經驗

2023-11-13 08:49:54

2018-06-29 08:36:50

2023-09-28 11:45:09

泛型類對象編譯器

2015-03-27 10:20:41

谷歌地圖谷歌偉大

2020-05-29 14:18:12

Java泛型數據

2020-05-22 13:35:39

Java 開發者代碼

2019-12-04 12:33:48

程序員技術設計

2021-09-11 22:56:58

微信功能技巧

2020-07-28 15:18:52

Gartner信息安全網絡安全

2021-05-21 05:24:03

Excel數據技巧

2022-08-01 09:44:07

架構MySQL數據庫

2022-04-21 07:52:08

JS線程GUI渲染
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲视频中文字幕 | 成人黄页在线观看 | 成人免费在线播放视频 | 91亚洲精选 | 亚洲欧洲一区 | 久草在线中文888 | 日韩av在线一区 | 欧美一区二区三区在线 | 91人人看 | www国产成人免费观看视频,深夜成人网 | 色婷婷av99xx| 亚洲日韩中文字幕一区 | 午夜影院毛片 | 久久久亚洲综合 | 国产精品色综合 | 一区二区三区久久 | 日本精品一区二区三区在线观看视频 | 欧美精品一区在线 | 色综合一区二区 | 男人的天堂一级片 | 一区二区三区四区在线播放 | 国产高潮好爽受不了了夜色 | 91中文在线观看 | 精品久久久久久18免费网站 | 密室大逃脱第六季大神版在线观看 | 亚洲 欧美 日韩在线 | 521av网站| 欧美 日韩 国产 成人 在线 | 农村黄性色生活片 | 精品欧美一区二区三区久久久小说 | 国产 91 视频 | 99色综合| 99re视频在线 | 啪一啪在线视频 | 久草在线高清 | 欧美日韩在线视频观看 | 国产精品有限公司 | 国产免费观看久久黄av片涩av | 99re在线视频| 日韩影院一区 | 91精品国产91久久久久久丝袜 |