Tiburon遊記4 結合分散式DataSnap和JSON架構

来源:互联网 发布:python支付宝扫码支付 编辑:程序博客网 时间:2024/04/30 01:55
隨著Tiburon推出的日期日益接近,每天的BetaBuild也變得更密集了,我報上去的許多中文/Unicode相關的臭蟲也不斷的被修正,Tiburon的IDE也日益更加穩定,看來距離Embarcadero正式推出Delphi/BCB2009的日子應該是不遠了,記得在去年初時想到不知Unicode的Delphi/BCB版本何時才會出來,沒想到日子過的這麼快,支援Unicode的Delphi/BCB版本即將出現在我們面前,而這個版本對於許多的Delphi/BCB開發人員來說是極為重要的一個版本,因為Delphi/BCB2009是一個關鍵的昇級版本,在這個版本之後Delphi/BCB將進入64位元和多核心的世界,因此把握Delphi/BCB2009昇級舊系統並且使用Delphi/BCB 2009開發現在和未來的系統以便相容於未來的64位元和多核心趨勢是最為明智的選擇。

在上一篇文章中我介紹了如何使用Tiburon建立一個簡易的以JSON為基礎的分散式架構,在本篇文章中我將繼續討論如何結合原本Delphi/BCB開發人員熟悉的DataSnap架構和JSON架構以便開發出新一代以JSON為基礎的分散式架構,如果您使用過DataSnap,又閱讀了前面數篇文章,那麼這將非常的簡單,畢竟RAD精神就是讓您簡單的就能夠開發出您要的架構,不是嗎?當然如果您想要追根究底的瞭解DataSnap/JSON技術,提供了完整原始程式碼的VCL框架也可以讓您學習到許多的技術。
為了簡單說明起見,我延用『Tiburon遊記3 動手建立一個DataSnapJSON伺服器吧』這篇文章基本的內容來建立分散式DataSnap和JSON架構,請您交互參考本篇和『Tiburon遊記3動手建立一個DataSnap JSON伺服器吧』文章的內容。

步驟 1 – 建立分散式JSON伺服器

前5步驟是一樣的,接著
6.    選擇File|New|Other,建立Server Module如下:
http://blufiles.storage.live.com/y1p9O2912b1S0AwySkq_UCOvKASXH_WsALZPqI7QUfbBmfqmKfGUtovqJNYDGiCdZg1
 
Server Module的型態是TDSServerModule,讓我們看看它的定義:

  {$MethodInfo ON}
  TDSServerModule = class(TProviderDataModule)
  end;
  {$MethodInfo OFF}

果然,TDSServerModule即是資料模組,只是以{$MethodInfo ON}和{$MethodInfo OFF}包圍宣告,因此它的繼承類中宣告的方法將可輸出到用戶端。
7.    在Server Module中拖曳資料庫中的資料表到其中,例如下圖是我把Blackfish SQL中的SEMINARS資料表拖曳到Server Module上:
 http://blufiles.storage.live.com/y1p5J50wiel1ZxBUlifIHMucweCWk3-4cGRp9PW7OmKMIkWr4vFnB5TIbdudGGtwwgc

8.    在Server Module的類別中,我宣告和實作了一個public方法GetSeminars如下:

function TDSServerModule1.GetSeminars : TDataSet;
begin
  Self.SEMINARS.Open;
  Result := Self.SEMINARS;
end;

由於在DataSnap 4中我可以直接把TDataSet傳遞到用戶端,因此在GetSeminars中我只需要把SEMINARS這個TSQLDataSet物件傳遞回用戶端即可,DataSnap會自動以JSON封裝TDataSet的物件。

9.    在JSON伺服器的TDSServerClass元件的OnGetClass事件中輸出Server Module類別:

procedure TForm10.DSServerClass1GetClass(DSServerClass: TDSServerClass;
  var PersistentClass: TPersistentClass);
begin
  PersistentClass := TDSServerModule1;
end;

現在編譯並且執行JSON伺服器,接著就可以建立分散式用戶端了。

步驟 2 – 建立分散式用戶端

前3步驟是一樣的,只是TSqlServerMethod元件的ServerMethodName特性連結到TDSServerModule1.GetSeminars方法。

4.   在主表單中加入DataSetProvider元件連結到TSqlServerMethod,這是因為TSqlServerMethod呼叫的TDSServerModule1.GetSeminars方法會回傳一個TDataSet,因此就可以做為資料提供者,DataSetProvider元件就可以以這個回傳的TDataSet做為資料的來源
5.    放入TClientDataSet元件,連結到DataSetProvider元件
從步驟4,5可以看到這和以前使用DataSnap開發用戶端是 樣的,但是現在是連結到JSON伺服器。

6.    最後再放資料感知元件和一個Button元件,在Button元件中撰寫:

procedure TForm11.Button1Click(Sender: TObject);
begin
  Self.ClientDataSet1.Active := True;
end;

以開啟並且存取資料。
下圖是我同時執行三個分散式用戶端同時存取一個步驟1開發的JSON伺服器的畫面:
http://blufiles.storage.live.com/y1pB-4bufYVKP68GR7VQgO2nKtxBF1w1oYDYaX034K5hOtG7rzQtAYRHjMeYpUfFGHY

您可以看到用戶端成功的從JSON伺服器取得了資料並且顯示在資料感知元件中。
請注意這個應用系統重要的意義,用戶端不需要再載入各種資料庫驅動程式,只需要DataSnap的用戶端DLL和程式本身就可以從JSON伺服器取得資料,因為現在資料都以JSON格式傳遞,DataSnap 4這種用戶端是真正的thin-client。
使用Tiburon開發JSON架構的分散式應用系統是不是又簡單,又強大呢?如果您需要更多的處理能力,那麼VCL框架中提供了許多相關的JSON處理類別可以讓您呼叫使用,這些進階的主題就留待其他文章來討論了。