為什麼我要寫自己的框架?

merjiezo發表於2016-06-12

我覺得程式設計的框架應該分為:直接用->拋棄->重拾

框架(framework)是一個基本概念上的結構,用於去解決或者處理複雜的問題。這個廣泛的定義使用的十分流行,尤其在軟體概念。框架也能用於機械結構。

其實說白了框架就是使用別人造好的輪子。在軟體開發裡面就是command+C/command+V。

先自我介紹一下,我是一名信管專業的大學生,從我的專業可以看出我就是以後大家嘴裡的程式設計師。洋洋灑灑寫了一些程式碼,用了一些主流的框架,現在有一些體會分享給大家。

作為一個程式設計師學習一門新技術是讓人感到興奮的,隨之而來的問題就是如何快速的掌握語言吶?很多技術的過來人都不約而同的說:用別人已經造好的輪子唄,你看,多省力,在很久以前我也是他們的一員,也喜歡使用大量的框架(js有jQuery、Express、socket.io.js等;PHP有phpword、Yii、laravel;html裡面有Bootstrap、bootcss、normal)。曾幾何時,我覺得很興奮,在如此短的時間內就可以做到這樣的高度,讓我十分的開心。開發出的內容也完全符合校內應用的需求。我變成了一個別人眼中的“大師”。

但事情並沒有往想象的地方發展。框架用的時間久了之後就發現了一個問題:我真的有學習過嗎?我學的內容真的有用嘛,這些框架內的東西能對我今後有幫助嗎,當然,這種想法不是一天形成的,還有一個小的故事。

在使用PHP開發網頁應用的時候,作為著名的Yii框架,網頁有大量程式碼可以供我複製黏貼,我用的很爽,能在短時間內開發出專案,bootstrap也可以幫助我在短時間內拼接出一個像樣的網站,也當上了校內某組織軟體開發部的負責人。但當有一天在講授開發經驗的時候,當我當著大家的面真的靜下心來寫我需要展示的一個類的時候,以前用了這麼多的框架,我發現在這麼多人面前的我已經幾乎寫不出來一個正確的類了!!執行的時候不是這邊有問題就是那邊出現了錯誤。原來在以前我只想著如何使用它,如何整合別人的程式碼,卻忘了一個最最本真的東西:創造!我幾乎失去了程式設計的能力,變成了電腦面前的程式碼複製員。

結果是令人沮喪的,當天我都在思考這個問題:我今後到底能幹嘛?是繼續做一個程式碼複製員,還是打起精神,看看這些框架的背後有什麼內容吧!

於是我就投入了看原始碼的行列:我開啟了bootstrap,開啟了Yii框架的vender資料夾,開啟了jquery,試圖去開啟那個封裝起來的黑盒子,瞭解這些框架背後的智慧。

結局可想而知,作為css的bootstrap還可以理解,但是其他大型框架的程式碼幾乎就是一座不可逾越的大山,讓人望塵莫及。難道就這樣放棄,繼續用下去,不觸碰那個永遠神祕的盒子了嗎?

答案顯然不是這個,電影《火星救援》的最後有一句話說的很好:
你要麼認命放棄,要麼繼續投入工作,把它們都解決了。

然後我就睡了一覺!哈哈開個玩笑啦,沒有!我清醒了,喝了口水,跑了個步,馬上投入了工作,開始閱讀!然後發現我還是看不懂它!怎麼辦吶,誒!我看不懂,我可以按照自己對框架的理解編寫一個框架呀!於是我馬上投入了工作,大量的Google之後發現行不通,怎麼辦!聰明的我馬上想到我不編寫整個框架,那我寫部分功能也是可以的呀,於是就有了我的第一個框架的擴充套件:DbFactory.php檔案。

我很興奮,因為我終於開始創造點東西出來了,雖然他很基本,連線了資料庫,封裝了幾個方法,但是我覺得這距離大師又近了那麼一丟丟,每天都是一丟丟,那我還得了哈哈!

當你真正的開始想讓你的程式碼變的更好,你會去掌握和了解到更加多的知識,時間久了以後會在有一天瞬間茅塞頓開。
這就是開發裡的量變引起質變。

當寫出這個檔案的時候,我是很興奮的,馬上分享了出去,結果就是啥都沒有發生,世界還是那樣,我也沒有變帥,說明我在成為大師的路上只進步了一點點,或者乾脆沒有進步,只是知道的多了點。於是我又開始新的一輪學習,看大量的書籍,有一天我重新開啟Yii框架在我當時看起來很難理解的程式碼的時候我發現:我居然有點明白它的工作原理,知道整體的架構了!

這個發現了這個的我很興奮,一個想法油然而生:為何我不開始編寫自己的框架吶!

說幹就幹,花了一天的時間就完成了基礎類和程式碼的編寫,包括路由、模型類、控制類、一些基本的方法都封裝在裡面,我覺得自己簡直太厲害了,居然在我看來可以完美的執行!我覺得已經可以了,於是就把它推了上去(ps:沒有加上自動require,只是在每個檔案的最上面加上了),在不斷的測試之後就發現,這邊有bug,那邊也有!require不使用絕對路徑簡直難用,整個框架想一盤散沙,一點都不好用,可擴充套件性幾乎沒有,我又陷入了沉思。錯在哪裡了!

真正的頓悟是在最近一次開啟Yii框架原始碼,看到了autoload之後頓悟:其實可以根據需求自動載入檔案,很多問題也就解決了,當然,這篇文章也就列舉這一個問題,其實我碰到的問題不止這些,很多以前理解錯誤的地方也隨著編寫這個框架變的正確了✅。

下圖是我現在框架的架構。程式碼太多,就不做展示了。


如今的框架圖.png

之後的工作就是讓框架更加的豐滿,不敢說比得上一些主流的框架,說實話根本不能夠和他們相比,無論從結構、思考還是思考上,編出主流框架的他們才是真正的大師。但我通過這個至少有了自己的思考,尋找回了自己的創造力,讓自己距離真正的大師進了一點,不得不說這種進步是讓人興奮的。下圖是我早上剛剛啟動的js框架。


js框架

最後說一下我認為的好處:
1、對整體架構的思考
2、提高自己的創造力
3、提高自己獨立思考的能力
4、提高自己閱讀別人程式碼的能力
5、用到和認識了大量的程式語言內建函式

下面是我的一點小建議:如果是在公司,肯定有大量的業務和需求需要實現,那就直接拿來用,如果你是學生,那你很幸運,你有大量的時間學習,那就從現在開始動起你的鍵盤開始編寫吧!無論多麼困難,時間長了你就會發現,對整體的思考就越來越清晰,明確了!

相關文章