為什么我要寫自己的框架?
我覺得編程的框架應該分為:直接用->拋棄->重拾
框架(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之后頓悟:其實可以根據需求自動加載文件,很多問題也就解決了,當然,這篇文章也就列舉這一個問題,其實我碰到的問題不止這些,很多以前理解錯誤的地方也隨著編寫這個框架變的正確了✅。
下圖是我現在框架的架構。代碼太多,就不做展示了。
之后的工作就是讓框架更加的豐滿,不敢說比得上一些主流的框架,說實話根本不能夠和他們相比,無論從結構、思考還是思考上,編出主流框架的他們才是 真正的大師。但我通過這個至少有了自己的思考,尋找回了自己的創造力,讓自己距離真正的大師進了一點,不得不說這種進步是讓人興奮的。下圖是我早上剛剛啟 動的js框架。
***說一下我認為的好處:
1、對整體架構的思考
2、提高自己的創造力
3、提高自己獨立思考的能力
4、提高自己閱讀別人代碼的能力
5、用到和認識了大量的編程語言內置函數下面是我的一點小建議:如果是在公司,肯定有大量的業務和需求需要實現,那就直接拿來用,如果你是學生,那你很幸運,你有大量的時間學習,那就從現在開始動起你的鍵盤開始編寫吧!無論多么困難,時間長了你就會發現,對整體的思考就越來越清晰,明確了!