摘要:前言我是,如果你還不認識我,不妨先看看技術的前世今生一,以及技術的前世今生二前面我提過,我的大哥有一個叫的死黨,這家伙有事沒事經常上我們家串門。時間來到了年,在那前后發生了兩件事讓我印象深刻。傳送門技術的前世今生一技術的前世今生二
前言:我是JavaScript,如果你還不認識我,不妨先看看《Web技術的前世今生(一)》,以及《Web技術的前世今生(二)》
前面我提過,我的大哥HTML有一個叫PHP的死黨,這家伙有事沒事經常上我們家串門。
這天,PHP又來找我大哥閑扯。
“老哥,你知道一個叫Ruby的家伙嗎?”PHP問道。
“知道啊,最近我們合作過好幾個項目呢。怎么想起問它了?”
“呀,你是不清楚,這小子最近在我們那可火了,聽說是鼓搗了一個什么架子。”PHP繼續說道。
“喔,你是說Rails啊,”很明顯,大哥對PHP口中的“架子”很熟悉,向PHP解釋道:“那不是架子,是Ruby用來構建網站的框架。”
我在一旁聽著,借機打趣道:“后端那幫家伙有一個算一個,誰敢說開發網站有比咱PHP老兄還火的?”
“Js,你可別小看了這個Rails,”大哥作為一個老實人,聽不出我在開玩笑,繼續一本正經的說:“之前PHP老弟的平易近人對客戶是挺有吸引力的,然而隨著他們的網站規模越來越大,PHP的親和力對于他們而言反而成了一種難以駕馭的負擔,似乎他們更需要尋求的是一種約束。”
“哎呀,老哥,你說的太對了,”PHP突然從凳子上跳起來,“最近好幾個老客戶都從我這撤了,聽說跑去找Ruby那小子了。老哥你說,那小子究竟是有什么魔力?”
“它搞的Rails框架就是用來規范網站的開發行為,明確你我之間的職責所在的。”大哥慢條斯理地說道。
“大哥,您就別賣關子了,趕緊給我們講講這個Rails吧?”對這事我也來了興致。
“它對一個網站的架構劃分了三個層次。比如我就歸屬于只負責頁面展現的視圖層(View);有關業務邏輯的活從視圖層剝離出來,由不同的模型(Model)去做;至于接受用戶的輸入交由恰當的Model去處理,處理完后再將數據傳遞給View,這個由控制器(controller)完成。”
大哥看著我迷茫的眼神,又繼續補充道:“對于一個動態網站而言,每一個頁面應該長成什么樣子是一件事,而究竟該呈現哪一個頁面,以及頁面上動態變化的數據該是什么又是另外一件事。按之前PHP的做法,一個文件中既有我們前端用來布局頁面的代碼,又混雜著它用來處理業務邏輯的代碼,先不說設計上是否合理,首先這就得要求使用者既要熟悉我們前端,還要熟悉后端,”大哥一邊解釋著一邊朝我詭秘的一笑:“Js,你有興趣了解下PHP每次上工都是如何干活的嗎?”
”別別別,”我趕緊搖頭,“每次我連自己的活都干不完,哪有工夫搭理它啊。”
PHP在一旁聽著不樂意了,”去你的,我還煩你老在我眼前晃悠呢。“
“這就對了!Rails的出現就解決了這個問題,我們前端的工作就只是套用所謂的模板引擎來做頁面的展現,管它Ruby操作數據庫也好、做邏輯運算也罷,都統統和咱們無關,我們只需要拿到它最終處理過的數據填充到模板引擎里,再給客戶展示出來就行了。”
“呃??老哥,你這說的是不是所謂的MVC模式啊?我聽我的Java老大提起過。”PHP問道。
“沒錯,就是MVC,Java很早以前就玩這個了,它有一個類似的框架叫structs,只是之前這種開發模式還不流行,最近被Rails炒起來了。對了,我聽Java說它的structs也要升級到二代了,估計出來也會火一把吧。“
“哈哈,PHP,看來你們后端的小伙伴們都在搞框架,就你落伍了哦??”,我又開始拿PHP開涮,“誒?PHP這家伙人呢?PHP??”轉過頭才發現它已經跑出很遠了,看來用不了多久關于PHP的MVC框架也會問世了。
(猿知原味注:隨著Ruby on Rails的流行,2007年之后的五年,進入到了Web后端發展史上一段框架橫飛的年代。框架的作用除了上面提到的展現層和業務邏輯層的解耦,還提供了諸如通過對象操作數據庫的ORM技術,以及URI路由、表單驗證、國際化、安全防護等網站開發中的常用功能。在這期間也出現了一大批優秀的Web框架,譬如SSH(Struts+Spring+Hibernate)、SpringMVC、Rails、ASP.NET MVC、Django、Flask、CodeIgniter、Yii、Lavarel、Beego??而且還遠遠不止這些。)
時間來到了2010年,在那前后發生了兩件事讓我印象深刻。
一是我們的很多客戶開始把原本在Web上提供的服務同時搬到智能手機上去,然而移動應用并不認識后端返回的Web頁面(猿知原味注:關于這一點,不包括近幾年興起的Web App和Hybrid App),這就迫使哪怕業務完全相同的應用,針對Web端和移動端也得去開發并維護兩套后端代碼。
二是貪婪的人類對在后端的View層渲染頁面還是不滿意,他們覺得我們前端就不該和后端摻和到一塊去,希望將我們徹底分開。
之所以這兩件事讓我記憶猶新,是因為最終解決它們是我起了大作用。還記得我異步刷新網頁的能力嗎(Ajax)?既然人類討厭在后端做頁面渲染,那完全可以通過Ajax將數據拿到前端來渲染。這樣一來,一方面做到了前后端分離,糾結的人類不必再為該由誰負責模板引擎而苦惱了;另一方面,我們前端和移動端一致決定讓一個叫JSON的家伙當我們的聯合運輸大隊長,由它來負責后端數據的傳輸工作,這樣對于相同的業務,后端只需要維護一套代碼就夠了。
“With great power comes great responsibility”,彼得叔叔對蜘蛛俠說的一句話讓我感同身受。自從我把頁面渲染的活攬到前端來之后,后端那幫哥們算是解脫了,然而我肩上的擔子迅速變沉了,每天忙的不可開交。
這種情況持續了一兩年,直到有一天,我的好大哥提醒了我。
“Js,你看啊,很多年前我們前端的職責就只是做頁面的展示,但Web發展到今天,我們也和數據打上了交道。你這邊不僅要發數據、收數據,還要處理數據,最后還要通過操作dom將數據更新到頁面上。”
HTML大哥接著說:“你是不是加粗文字可以借鑒當初后端那幫小子搞的MVC框架,也鼓搗個什么框架出來,方便咱們前端將數據的活和視圖的活分開來干?”
我一拍大腿,“對啊!現在的狀況確實太凌亂了。我們也可以搞個View層只負責頁面渲染,搞個Model層專門處理數據模型,”我想了想接著說:“再通過某種方式將這兩層關聯起來,Model數據改變的時候同步到View顯示出來,View上的改變也能將數據同步回Model。”
“你說的這不就是雙向綁定嘛,”大哥給我的設想下了個定義,“還記得我們有個叫Microsoft的客戶嗎?它在數據綁定這一塊很有經驗,你可以去找它討教討教。”
(猿知原味注:MVVM模式最早就是被微軟的WPF和Silverlight的架構師John Gossman提出來的)
沒過多久,像AngularJS、KnockoutJS、EmberJs、VueJS等一系列MV*模式的前端框架就相繼出現了。自此,我又過上了輕松愉快的美好生活。
故事讀完了,還是意猶未盡?沒關系,關注“猿知原味”公眾號(yz--yw),還有一大波生動有趣的干貨等著你。
傳送門:《Web技術的前世今生(一)》《Web技術的前世今生(二)》
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/29849.html
摘要:前言我是,如果你還不認識我,不妨先看看技術的前世今生一平靜的生活已經有一段日子了。傳送門技術的前世今生一技術的前世今生三 前言:我是JavaScript,如果你還不認識我,不妨先看看《Web技術的前世今生(一)》 平靜的生活已經有一段日子了。 這一天,HTML大哥面露不悅地走過來問我: Js,你是打算和我們分家嗎? 大哥,您這說的哪里話,我什么地方做的不對么?我一臉茫然地回答道。 哼,...
摘要:前言我是,如果你還不認識我,不妨先看看技術的前世今生一平靜的生活已經有一段日子了。傳送門技術的前世今生一技術的前世今生三 前言:我是JavaScript,如果你還不認識我,不妨先看看《Web技術的前世今生(一)》 平靜的生活已經有一段日子了。 這一天,HTML大哥面露不悅地走過來問我: Js,你是打算和我們分家嗎? 大哥,您這說的哪里話,我什么地方做的不對么?我一臉茫然地回答道。 哼,...
摘要:前言我是,如果你還不認識我,不妨先看看技術的前世今生一平靜的生活已經有一段日子了。傳送門技術的前世今生一技術的前世今生三 前言:我是JavaScript,如果你還不認識我,不妨先看看《Web技術的前世今生(一)》 平靜的生活已經有一段日子了。 這一天,HTML大哥面露不悅地走過來問我: Js,你是打算和我們分家嗎? 大哥,您這說的哪里話,我什么地方做的不對么?我一臉茫然地回答道。 哼,...
摘要:直到有一天,大哥接到一項特殊的任務,一位年輕的爸爸想給自己患有抑郁癥的孩子制作一個網站,希望網頁里的天空每天都可以更換一種顏色。猿知原味注老頭闡述的方法是最早的動態網頁實現方案技術。傳送門技術的前世今生二技術的前世今生三 我的名字叫JavaScript,你也可以喊我Js。在說我的故事之前,我覺得有必要先介紹下我的大哥HTML,和大嫂CSS。沒錯,那個叫Java的家伙不是我的親戚,我們隔...
摘要:直到有一天,大哥接到一項特殊的任務,一位年輕的爸爸想給自己患有抑郁癥的孩子制作一個網站,希望網頁里的天空每天都可以更換一種顏色。猿知原味注老頭闡述的方法是最早的動態網頁實現方案技術。傳送門技術的前世今生二技術的前世今生三 我的名字叫JavaScript,你也可以喊我Js。在說我的故事之前,我覺得有必要先介紹下我的大哥HTML,和大嫂CSS。沒錯,那個叫Java的家伙不是我的親戚,我們隔...
閱讀 3048·2021-09-22 15:52
閱讀 2913·2019-08-30 15:55
閱讀 2707·2019-08-30 15:53
閱讀 2460·2019-08-30 13:21
閱讀 1628·2019-08-30 13:10
閱讀 2487·2019-08-26 12:09
閱讀 2574·2019-08-26 10:33
閱讀 1810·2019-08-23 18:06