做了一段時間的web應用接觸了一些架構自然也會有自己的一些思考。現在做Web比較流行的語言應該也就Java PHP 還有.Net 這麼幾種吧。他們當中以PHP最為簡單,容易上手但是支援它好的分層架構似乎還沒有,以前搜尋過大多都是一些CMS之類的,個人覺得比較好的是WordPress,它的理念不錯,對於需要的功能只要自己做外掛程式就好了,但是這裡面有一個問題,這些架構大部分都是與內容資訊系統相關的,如果要做應用恐怕還不是很給力,像Java 的SSH 和 .net的MVC(現在好像已經到3.0版本了)這樣的支援三層架構的架構在PHP裡好像還沒有至少我到現在也沒有發現。
對於SSH 和 Asp.Net Mvc 這樣的支援三層架構的架構都有個特點,他們適合大型應用這是無疑的,而且使用他們可以使系統的結構更清晰,而且比較適合團隊合作開發,因為MVC架構的特點就是Model 、Controller 和View 三個層次都可以獨立的開發並且可以獨立的做每個部分做單元測試,這對於一個團隊來說是很重要的,因為每樣工作都可以獨立來完成而且不太容易受到別人工作的影響,只要各層次間約定好通訊協定就可以了。但是這些結構是不是就很好了呢,我不覺得,首先SSH 是針對Java 的,Asp.net Mvc是針對.Net開發的,他們都是為獨立的一門語言開發的,而且在具體實現的時候View裡面難免面有伺服器代碼如Java或C#。試想下,View在三層架構裡面是用作展示層,用於將資料展示給使用者並接受使用者的輸入的一個互動介面,這一層一般是由UI工程師獨立開發的,並在開發結束後交給後台編碼人員使用,那麼編碼人員從UI設計人員那裡拿到的是什麼呢?一般是Html Css Js 之類組織起來的東西,那麼這些東西是可以直接用來做View的嗎?應該不是,至少我現在瞭解到的是這樣的,大部分後台編碼人員都是在UI設計人員產出的基礎上再進行修改完成最終的View,如將Html加入Java代碼形成最終的Jsp 檔案或者加入 C#代碼形成最終的.net檔案得到最終的View。那麼有沒有一種方式是UI設計人員可以獨立完成View的所有工作最後產出的就是一個符合要求的View 而後台編碼人員又不需要再對View進行修改的開發方式呢?我覺得是有的。首先我們來分析下UI設計人員應該掌握的Web用戶端編程技能有哪些,html 和css 這個是必需的,js 這個作為一個和個的UI工程師我覺得也是必需的。那麼我們假定UI工程師現在已經掌握了上述三種編碼技能,那麼我們再來看下每種語言能做什麼.html負責結構,css負責布局與美化,js 則負責行為即動態互動功能。js 可以採用ajax 技術在伺服器擷取資料。當然如果從頭開始實現可以跨瀏覽器的js還是有一定難度的,幸好有很多庫可以使用如 JQuery 和 MoolTools都是不錯的選擇。有了這些js 架構輔助我們要實現跨瀏覽器的Ajax通訊就很簡單了,所以UI工程師是應該掌握這些的。通過上述資訊我們可以看到,js 可以很容易的在伺服器擷取資料,那麼我們是否可以考慮將js 發出的請求的資料和伺服器對該請求處理後的應答的資料進行格式化約定呢?答案肯定是可以的,因為我們有Json 這個 在java .net 和 javascript 語言裡都有很好的支援就連php 也是有原生的函數對其進行支援,所以我們完全可以採用json 在瀏覽器和伺服器間傳遞資料。既然在瀏覽器和伺服器間可以通過json 傳遞資料那麼瀏覽器裡跑著的有 html css 和javascript的東西又是什麼呢?肯定有大部分人說這是應用程式的介面,沒錯確實是介面,這沒什麼錯誤,因為我們一直都這麼看。雖然以前我也是這麼認為的,但是現在我不這麼想了,因為我現在更覺得它像是一個獨立的軟體,就類似於從前的C/S中的C,就一個用戶端他也是一個軟體只是它的運行平台是瀏覽器而已,我並不認為這是一個錯誤,至少現在我沒有找到反駁我的理由。既然 瀏覽器裡跑著的由html 和 css 及js 構成的東西是用戶端,那麼由java php 或 c# 編寫的在後台啟動並執行jsp php 或aspx的檔案組成的東西我可以看作是一個獨立的伺服器,他是為 html css js 這些東西組成的用戶端軟體伺服器的,我覺得這麼想沒做,於是我現在可以把它們看作是兩個獨立的軟體在通訊,我可以之間定義通訊協定,這樣基於這個思想實現的用戶端和伺服器在邏輯上是兩個獨立的軟體,一個運行於客戶的瀏覽器裡,這個用戶端我稱之為BC,另一個 是運行於商務服務器,是為BC提供業務支援的伺服器,我稱之為S,他們之間通過JSON進行通訊。那麼這樣帶來的好處理,UI工程師可以獨立完成BC的開發,包括資料的顯示和擷取等一些列的操作,而不用關心伺服器是用什麼語言開發的應為BC裡面不會出現Java 或 PHP等這樣的伺服器語言,不僅如此後台編碼人員只要按照彼此的約定實現JSON定義的命令和資料響應等為BC提供收發資料及處理資料的能力即可,而不用再去修改UI工程師產生的UI,因為此時他關心的只是一些列的Json封裝的命令和資料。
類似於Java 的 SSH 和Asp.net MVC 架構,我所提到的這種設計模式也可以設計成MVC的模式MVC的核心思想是分離,對於具體的實現每個架構都有自己的特點,所以在此不做爭論),我們的BC用戶端在系統中稱之為View ,接收 和響應BC請求的是一些列的jsp 、php或aspx等具體是哪一種看採用具體語言決定,在這些檔案裡我們僅需要接收BC的資料並向BC返回操作結果或資料集合被JSON封裝的資料),至於Model則根據採用的具體編程技術可以是 dll 也可以是 javabean 也可以是php 的class等。
關於本文所講述的web 應用設計方法有什麼好處呢?我個人覺得好處是,UI工程是產出的是獨立的軟體不需要在由後台編碼人員進行修改,其次是伺服器可以由任何伺服器語言編寫,如java 或php都可以,只要實現了JSON定義的通訊協定就可以,對BC用戶端來說需要修改的只是請求的檔案的尾碼而已其餘都可以不用個修改。而且此時實現的View 也很容易在其他項目裡面複用,因為在view 裡面沒有對具體的伺服器語言的依賴,如SSH的View要依賴於structs 或jsp 的標籤等。
註:以上所屬為本人工作心得,和今日對Web應用程式所思所想,不足之處上多,文中所提及的設計方法也正在努力探索中,至於好與壞各抒己見,歡迎文明拍磚650) this.width=650;" alt="" src="/neweditor/editor/images/smiley/1.gif" />!