1. 程式人生 > >碼農翻身——什麼是框架?

碼農翻身——什麼是框架?

張大胖立志走上Java之路, 聽了大神Bill的指點, 先學了Java SE, 把集合、執行緒、反射、IO、泛型、註解之類的基礎知識學了一遍, 在Bill的嚴厲督促下,寫了大量的程式碼。

然後開始學Web基礎,什麼Http, html, javascript , css , servlet, jsp , tomcat ...... 又是一大堆知識點。 他在網上找了一個小網站, 自己模擬著做了一下, 雖然不是專業美工, 介面慘不忍睹, 但總算是把功能模仿了七七八八, 很有成就感。

大胖拿去給Bill 看了, Bill 誇獎道: “嗯,功能實現的還可以, 沒有用任何框架能做成這樣子, 很不錯。 ”

大胖說: “框架?  什麼是框架?”

Bill 愣了一下: “ 你還突然把我給問住了, 我們整天開口框架,閉口框架, 現在讓我給框架下個定義, 我還真說不出來, 讓我想想。 ”

Bill 閉目養神, 大胖虔誠等待。

不到一炷香功夫, Bill睜開眼睛:“ 我來給你舉個例子, 你不是剛剛用servlet和jsp做了小的Web專案嗎, 假設有人出錢讓你再做一個類似的系統,你會怎麼辦?”

“那我就把現在的程式碼複製一下, 在上面改改, 不就得了? ”

“如果有十個八個類似這樣的專案呢, 難道你都通過複製貼上來做嗎?” Bill 問

“十個八個? 我還是跳樓去吧。  ”

“那你沒有想想把其中重複的一些東西抽取出來, 形成可以複用的東西?”

張大胖說: “ 聽你這麼說,還真的有一點可以複用的東西, 比方說URL和業務程式碼的對映, 我經常會遇到類似這樣的 url:  www.xxx.com?action=login , 在後臺的servlet 中我就判斷,  如果action 的名稱是login ,   我就把userName, password 這樣的引數從表單中提取出來, 執行登入的程式碼。  我得寫很多的if else 才能支援不同的業務邏輯, 很折磨人。 有時候我就想, 要是有一種方法, 能夠直接把URL和Java類直接對映起來就好了 ,  這樣就輕鬆多了!”

“沒錯,這是一個很好的想法, 還有嗎? ” Bill 笑著問。

“嗯。。。 再比如資料驗證啊,比如登入時使用者名稱或者密碼出錯, 我要在瀏覽器端顯示錯誤提示資訊,這個也很難搞啊, 錯誤提示的字型、顏色、圖示、位置太煩人了。”

“還有嗎?”

“對了,訪問資料庫也是個大問題, 我寫了很多的SQL, 很多的JDBC 程式碼, 僅僅是為了把資料從資料庫取出來, 放到Java 物件中去。 你肯定知道,直接用JDBC程式設計得處理很多細節問題:一定要記住關閉連線了, 處理異常了 。。。等等, 不瞞你說,很多程式碼都是我複製貼上的。”

“難道你不能寫一個通用的類, 傳入SQL,返回結果集嗎? ”  Bill 問道。

“那我肯定是寫了, 但是把結果集變成Java 物件還有一段很長的路呢, 沒啥技術含量, 純粹體力活, 怪不得人家叫我們碼農! ”  大胖憤憤的說。

Bill 說: “我剛才翻了翻你的程式碼, 我發現很多的地方都讓人不爽啊, 比如你幾乎把所有的業務邏輯都寫到Servlet當中去了, 中間還摻雜者頁面控制和跳轉, 這麼亂七八糟像義大利麵條一樣的程式碼過了一個月估計你自己都看不明白了。 ”

大胖不好意思的笑了: “不用一個月,  這剛過了一個星期我就犯暈了。”

“所以嘛, 其實你這些問題我們的前輩早就遇到了, 他們也苦苦探索, 不斷尋找好的實現方式, 找到以後就把各種經驗給固化下來, 稱為最佳實踐。”

“最佳實踐?  能舉個例子嘛!”

“比如在Web開發中就有一個很好的實踐啊,叫做MVC。  就是針對你上面的業務邏輯和頁面控制混在一起提出的解決辦法。 這個實踐會強烈的建議你把資料模型、頁面展示、頁面跳轉控制分開來寫, 防止攪成一團。”  

Bill意猶未盡, 繼續舉例: “再比如你說的第一個問題, 也早就有解決方案了, 可以利用XML或者Java註解來描述URL和Java 類之間的關係,你只需要宣告一下, 背後的操作,都交由框架去處理了。  還有你的Java 物件和資料庫表的對應關係, 也只需要宣告一下,框架就可以幫你把資料取出來,填充到Java物件中去,這就極大的減輕了你的工作量。”

“Bill,   你又提到框架這個詞了,可不可以這麼說, 框架就像一個模板, 裡邊已經預置了一些公認的最佳實踐,我要是想用的話, 把我專案相關的東西填充進去就可以了,是不是這樣? ”

“可以這麼理解, 框架像個半成品, 是無法獨立執行的,必須由開發人員按照它定義的規則,把專案的程式碼放置到指定的地方, 由框架整合起來,這才是一個完整的應用程式。”

大胖撓著頭說: “那框架其實也沒什麼啊, 我只要理解了那些最佳實踐, 掌握了它的規則,可不就學會了嗎?”

“沒錯, 現在很多Java Web系統都是基於像SpringMVC,  Hibernate, MyBatis這樣的流行框架構造起來的,  框架不得不學, 但是如果只會使用框架, 只會填充程式碼, 那只是一個HTML填空人員。”

“那我學完了框架,可以用框架做專案了, 接下來學什麼?” 大胖心裡有點沒底。

“你要是對Java 後端程式設計感興趣, 還有很多東西啊, 用框架實現了業務只是很小一塊, 還有系統架構設計, 快取、效能、高可用性、分散式、安全、備份等很多內容啊, 你學的越多,就會發現無知的領域更多, 所謂學無止境啊!”

張大胖目視遠方,沉默了。。。。。

假如時光能夠倒流, 我會這麼學習Java