1. 程式人生 > >Attitude decides everything, detail decides success or failure!

Attitude decides everything, detail decides success or failure!

一般而言,我們平常接觸的大多數專案都應該是單純使用B/S或是C/S,除非在特殊場合,否則比較少混合使用B/S,C/S架構。首先說一下對這二種架構特點的一些個人理解。B/S應該是目前很多專案都應用的架構,瀏覽器的方式使得使用者的使用十分方便,使用者可以何時何地通過Internet訪問URL而進行相應的工作,升級維護也能比較集中,缺點就是瀏覽器的表現能力受限以及常常受非議的安全性問題,如果軟體的應用範圍區域不集中,而且使用者經常變換地點進行訪問,那麼這種架構是非常適合的。C/S架構的C端有非常強的處理能力,所以在互動表現和安全方面可以做得比瀏覽器強,但是缺點也是非常明顯的,安裝部署、升級維護、版本相容都是比較頭大的事情,一般的適用場景是集中的辦公室場所,使用者使用範圍相對穩定,以及一些對業務處理非常複雜的場合,為了降低伺服器的負荷,同樣需要C模式的支援。
    以前接觸過的電信領域,就有過混合架構的軟體。但是都是非常寵大,一直都對其實現方案比較感興趣,但是都沒有機會進一步瞭解。最近搜尋了一下相關的資料,總結一下混合應用的一些想法(只針對Java方向)。
    ①混合架構的問題集中點。服務端共享,客戶端採用不同的表現方式,共享的應該是業務層介面,持久層應該是遮蔽的。應用層的訊息傳遞就是整個應用的關鍵所在,雖然像Jakarta提供的httpClient這種模仿瀏覽器的元件,但是畢竟是模仿,在很多方面的功能還是缺失的。
    ②最傳統的方式是採用EJB做為服務,這個寵然大物容易讓人害怕,不過在分散式的系統中它還是有應用優勢的,像電信和金融這種行業應用還是比較廣的,而且現成的中介軟體和應用伺服器商都比較多,像Oracel、BEA、IBM、Sun都有成熟的應用產品,當然開發的成本和人力投入也是恐龍級資料的。
    ③有網友說在C端直接訪問資料庫,B/S結構不變,也就是通過資料庫進行共享。這種方式是不可取的,二個缺點:把伺服器的業務邏輯搬到了C端上,嚴格上講是不安全的,升級維護也非常麻煩;併發控制的壓力都在資料庫上。
    ④採用RMI,這個老古董相信應該很多人都不使用了,因為它的使用要一連串的手續,比如服務介面定義必須實現Remote介面,服務Server在實現時必須繼承UnicastRemoteobject類,必須使用rmic指令產生stub和skeleton等,設定上繁雜。
    ⑤Spring 遠端服務。這個應該說是比較可取的,大家都比較喜歡輕量級的東西。就如第一點所說的,通過遠端服務,我們可以在客戶直接呼叫服務端的服務介面,就像本地呼叫一樣,Spring對遠端服務提供了好幾種實現方案。
    ⑥WebService。適合異構環境,但是WSDL的這種方式相對來說會比較耗費資料,因為標準定義除了業務內容外,還有許多另外的說明內容。
    Spring遠端服務實現方案介紹:
    ⑴Spring + RMI。Spring把傳統的RMI方式的繁雜設定去掉,只要配置Bean檔案就和定義服務介面可以。RMI的服務啟動和管理都交給Spring來處理。RMI訪問的缺點就是對防火牆的穿透力比較差。
    ⑵Spring + Caucho的Hessian、Burlap。Hessian使用Http將物件以中性的二進位制訊息進行傳送,而不像RMI使用Java的序列化格式(這種序列化是專制的,不是Sun提供的序列化機制),由於是二進位制訊息,所以不受限於某種實現語言,傳輸時所需要的頻寬較小是其優點。Burlap是以XML檔案格式傳送物件,XML檔案有較高可讀性,應用程式只要能解釋XML就能接收訊息,當然也不限於某種語言,但是組裝XML和解釋XML都需要消耗資源,當傳輸大資料時效能應該存在問題。
    ⑶Spring + Http Invoker。由於Hessian的序列化機制不是正統的Java序列化機制,所以當遇到傳輸複雜的業務模型時,就會存在各種問題,為此,Spring又提供了Http Invoker,同樣是使用Http傳送物件,而且是使用Java的序列化機制。相比RMI,Http對防火牆的穿透力要強。
    後來嘗試了最後的這種Http Invoker方式,是在Spring2.0版本下嘗試的,開發非常簡單,網上也有大量的資料介紹。應該說從這裡入口可以做一些嘗試。目前遇到的一個專案就需要混合架構,B/S採用Spring2 + Struts2 + Hiberntae3,瀏覽器只提供一些查詢功能和資料展現,C端採用Eclipse的RCP平臺,共享伺服器的業務介面,呼叫就採用Http Invoker遠端服務,複雜的業務功能都集中在C端上。

以前也做過很多這處C/S和B/S混合的專案。但有些客戶端使用的不是java。當然,服務端也非得使用象EJB一樣的重量級元件。如我做過的一個系統C/S部分的客戶端使用的是delphi,而服務端只是普通的jsp/servlet程式,也未使用web service,而是通過servlet來為C/S部分的客戶端(delphi客戶端)返回資料(也包括一些加密資料),而客戶端通過http協議訪問servlet。當然,B/S部分的還是jsp。這樣實現個人感覺比較簡單。

運用Swing+http invoker+spring+hibernate開發C/S架構的系統從技術上沒有難度,而且java web start可以解決客戶端自動升級的問題,兩年前我們公司一個專案採用這種方式客戶就非常喜歡,客戶又感受到了傳統C/S應用的使用者體驗,而且沒有升級麻煩,只侷限在區域網中使用等待一系列問題。樓主擔心的問題10行程式碼就可以搞定(

http://www.javaeye.com/topic/82492,這麼笨的方法也虧這個人想的出來),首先擴充套件SimpleHttpInvokerRequestExecutor的openConnection()方法把客戶端的資訊(登入使用者,客戶端選擇的locale等)加到URL後面,在伺服器端寫一個filter把這些資訊取出來放到threadlocal中,在Service中不就可以隨便用了嗎,httpinvoker本身就是無狀態的,幹嘛非把httpSession牽扯進來,想法就沒對。

其實這種架構最麻煩的莫過於介面的開發,在我們原來的專案中一會兒客戶想要一個可以翻頁的表格,過幾天他又想點選表頭可以排序,單列排序他又不滿足了他又想多列排序,表格搞得差不多了表單又來了,Swing的佈局管理非常靈活,要做好一個表單真得費一番勁,而且客戶總喜歡把他們用VB,delphi做的系統拿來跟你比,說你介面醜陋啦,日期輸入不人性化啦...,用struts2半天就可以搞定的一個表單用Swing恁是搞了一個星期,寫介面的痛苦啊。總之,Swing的介面開發是個大麻煩,專案完了以後將一些可重用的元件整理了一下,但還是發現介面程式碼一大堆,極難維護,後來的專案只要客戶說C/S,我們也絕口不提C/S。

後來在javaeye首頁上看到一家公司的富客戶端解決方案的廣告,進去看了看第一感觸就是這個框架的作者當時絕對和我一樣痛苦過,只不過他痛定思痛走的更遠了一些,能夠把控制元件封裝起來,把專案中常見的問題在框架中一併解決了,現在只是感嘆如果這個框架能在兩年前出現那該有多好啊!

相關推薦

Attitude decides everything, detail decides success or failure!

一般而言,我們平常接觸的大多數專案都應該是單純使用B/S或是C/S,除非在特殊場合,否則比較少混合使用B/S,C/S架構。首先說一下對這二種架構特點的一些個人理解。B/S應該是目前很多專案都應用的架構,瀏覽器的方式使得使用者的使用十分方便,使用者可以何時何地通過Interne

Success and Failure Archives

What is the secret of happiness and life? Is it having the coolest friends in the world? Is it living in a beautiful home or focusing on being healthy?

Extjs中的successfailure .

1. Ext.form.Action.Submit的配置選項success、failure 根據返回json中success屬性判斷的,如果success為true,則success,false則failure,如果無json中無success屬性,failure,故要提示

Ext successfailure

1. Ext.form.Action.Submit的配置選項success、failure 根據返回json中success屬性判斷的,如果success為true,則success,false則failure,如果無json中無success屬性,failure,

(轉)extjs form表單和ajax請求的配置選項successfailure

1. Ext.form.Action.Submit的配置選項success、failure 根據返回json中success屬性判斷的,如果success為true,則success,false則failure,如果無json中無success屬性,failure,故要提示操作是否成功,必須要返回succe

Extjs/Ajax中的successfailure 何時呼叫?

1. Ext.form.Action.Submit的配置選項success、failure 根據返回json中success屬性判斷的,如果success為true,則success,false則failure,如果json中無success屬性,failure,故要提示操

failure during conversion to COFF:file invalid or corrupt

執行 mil 遇到 原因 link path環境變量 並且 失敗 啟動失敗 用Visual Studio 2010編譯一個C++工程時突然遇到下面這個編譯錯誤:fatal error LINK1123:failure during conversion to COFF:fi

【error】LINK1123: failure during conversion to COFF: file invalid or corrupt

意思是由於COFF標識轉換失敗。而在連線中完成此項工作的是cvtres.exe。這個錯誤的原因是存在多個版本的cvtres.exe。 所以找到這個檔案刪掉就好了 error C1189: #error : Please use the /MD switch for _AFXDLL b

Authentication or permission failure

容器裡使用ansible 專案報錯 PLAY [bootstrap installer] **** GATHERING FACTS ***fatal: [localhost] => Authentication or permission failure. In some cases, you ma

maven-compiler-plugin:3.5.2 or one of its dependencies could not be resolved: Failure to find org.ap

1.   背景     為了解決Eclipse JRE System Library [J2SE-1.5]問題(改build path Jre版本後, 再開啟eclipse 又變為1.5了), pom.xml加了   &n

LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

這是我在安裝完VC2010之後執行時(Ctrl+F5)出現的錯誤。 翻譯:Lnk1123:轉換到COFF期間失敗:檔案無效或損壞。   聯結器LNK是通過呼叫cvtres.exe完成檔案向coff格式的轉換的,出現這種錯誤的原因就是cvtres.exe出現了問題。 在電腦

extjs中submit提交後不進入success也不進入failure 解決方法

首先說明是後臺返回的json返回值格式不對 要執行success或failure,需在返回的json中有如下欄位 : 執行success裡面的操作 {success:true} 執行failur

VS2010 error: LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

安裝VS2012後結果使用VS2010時, 出現錯誤  LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt 解決辦法也很簡單, 如下:  To su

1,返回的資料為什麼在js的success裡面拿不到資料的原因。2,Uncaught SyntaxError: Invalid or unexpected token

【1】j就拿ssm為框架的專案 1,你沒有給你的返回值進行json的資料格式的轉化 1>.或者你的contorller沒有有返回值的註解@ResponseBody

Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory

com add err erro lin .com aso tps color Try this : sudo modprobe vboxnetadp ref: https://github.com/gasolin/foxbox/issues/32Erro

bash: ./make_ext4fs: No such file or directory 錯誤解決方法

nodes tor for locks exec ++ 能夠 ipp option 一般出現該錯誤是因為應用程序是32位導致的,能夠使用file命令來查看: [email protected]/* */:~/Desktop$ file make_ext4fs

codeforce C. Success Rate

-1 class ring div long long ios success 如果 true 寫完這道題目才發現自己對二分的理解太淺了 這題是典型的利用二分“假定一個問題可行並求最優解” 二分是通過不斷縮小區間來縮小解的範圍,最終得出解的算法 我們定義一個c(x) 表示判

未能加載文件或程序集“System.Web.Razor 2.0.0 or system.web.webpages.razor 2.0.0

拷貝 .html 文件 net bpa system 文件中 visual 加載 出現這種問題,有兩種情況: 一、bin目錄下沒有相應的dll,可以將相應dll拷貝至bin目錄或者設置相關dll的屬性“復制到本地”:true 二、如果是高於Visual Studio2013

解決MATLAB出現"??? Undefined function or variable 'x'."的問題,一個等號引發的大戰

fin r語 true r語言 檢查 fine 沒有 tlab 改進 最近寫了一段代碼,一直彈出“??? Undefined function or variable ‘x‘.”這個錯誤。仔細檢查了一下,發現是賦值的問題。比如下面兩段代碼 h=

關於er模型中的identifying relationship or non-identifying relationship

模型 管理 uml類圖 轉換 類圖 自己的 ati fyi ide 最近,主要負責項目管理和領域模型設計方面的工作,昨天在將UML類圖轉換為ER模型的時候,發現有identifying relationship or non-identifying relationship