什麼是框架?(最佳實踐)

 
原文連接:https://mp.weixin.qq.com/s/En7nC2cjVeNI_vLjr4nYTg

轉自:碼農翻身(微信號:coderising)javascript

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

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

大胖拿去給Bill 看了, Bill 誇獎道: 「嗯,功能實現的還能夠, 沒有用任何框架能作成這樣子, 很不錯。 」java

大胖說: 「框架? 什麼是框架?」數據庫

Bill 愣了一下: 「 你還忽然把我給問住了, 咱們成天開口框架,閉口框架, 如今讓我給框架下個定義, 我還真說不出來, 讓我想一想。 」編程

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

不到一炷香功夫, Bill睜開眼睛:「 我來給你舉個例子, 你不是剛剛用servlet和jsp作了小的Web項目嗎, 假設有人出錢讓你再作一個相似的系統,你會怎麼辦?」瀏覽器

「那我就把如今的代碼複製一下, 在上面改改, 不就得了? 」緩存

「若是有十個八個相似這樣的項目呢, 難道你都經過複製粘貼來作嗎?」 Bill 問tomcat

「十個八個? 我仍是跳樓去吧。 」

「那你沒有想一想把其中重複的一些東西抽取出來, 造成能夠複用的東西?」

張大胖說: 「 聽你這麼說,還真的有一點能夠複用的東西, 比方說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, 你又提到框架這個詞了,可不能夠這麼說, 框架就像一個模板, 裏邊已經預置了一些公認的最佳實踐,我要是想用的話, 把我項目相關的東西填充進去就能夠了,是否是這樣? 」

「能夠這麼理解, 框架像個半成品, 是沒法獨立運行的,必須由開發人員按照它定義的規則,把項目的代碼放置到指定的地方, 由框架整合起來,這纔是一個完整的應用程序。」

一鍵生成基於SSH框架的功能代碼

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

「沒錯, 如今不少Java Web系統都是基於像SpringMVC, Hibernate, MyBatis這樣的流行框架構造起來的, 框架不得不學, 可是若是隻會使用框架, 只會填充代碼, 那只是一個HTML填空人員。」

「那我學完了框架,能夠用框架作項目了, 接下來學什麼?」 大胖內心有點沒底。

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

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

相關文章
相關標籤/搜索