2014/03/12

無狀態的DataSnap寫法參考


由於DCOM可以在網際網路直接傳送 OleVariant,所以有網友提出這個方案,可擴充機能很高。

努力學習中!

※※※ 已經 2014 年 4 月份完成 COM / RESTful 中間層的建置,目前看起來還是 COM 版的 DataSnap 效能要好。 ※※※

資料來源:

看一下原作者是怎麼寫的吧!
(一)
思路:中間層與客戶端通過五個關鍵的接口過程進行交互操作(OpenData,SaveData,DeleteData,ExecRule,ExecProd)
OpenData:獲取數據集。
          客戶端傳遞數據標記給中間層,
          中間層根據數據標記請求和條件從數據庫的配置文件中獲取相關信息,
          得到數據,返回客戶端
        
SaveData:保存。客戶端傳遞修改後的數據集XML給中間層,中間層根據請求的數據XML,然後解釋XML並執行相關規則進行數據更新


DeleteData:刪除數據,客戶端傳遞數據實體的標記,和記錄主鍵,服務器對規則規則放在XML文檔中,系統讀取XML文檔,進行驗證,

ExecRule:校驗規則

ExeceProd:執行存儲過程
優點:
  因為獲取數據與更新數據過程的配置文件在存儲在中間層中,那麼更改與配置更為靈活,客戶端不用處理SQL語句,這樣,數據庫的變化,不會影響客戶端,

  數據提交時使用自定義更新過程,無論從速度、控制、安全等方面來說,都可以快速開發與定置,有時候只需用記事本編輯一下XML文檔即可
  另外,用戶提交的XML文檔,可以用DTD進行校驗。
  維護簡單,更新業務邏輯時僅需更新相應的規則XML文檔,無需更改中間層與客戶端
  能應付多變的系統開發過程,即使系統的流程或邏輯發生重大變更修改也相當簡單


缺點:
  即使系統再簡單,與需要編寫大量的XML文檔,需要對XML文檔有個很好的認識!
  ※※※ 還有在客戶端的開發上也必須使用大量 Runtime 程式碼建構資料集※※※

(二)
得到數據

{——————————————————————————-
  過程名:    TErpMainServer.OpenData
  作者:      kevinlee
  日期:      2005.04.30
  參數:      SqlID: Integer;客戶端傳遞數據標記給中間層
             const SqlWhere: WideString;條件
             var Data: OleVariant;得到數據
             var strMSG: WideString;錯誤提示信息
  返回值:    Integer
             0:成功
             非0:失敗
——————————————————————————-}
function TErpMainServer.OpenData(SqlID: Integer;
  const SqlWhere: WideString; var Data: OleVariant;
  var strMSG: WideString): Integer;
begin
  //得到SQLID標記對應的SQL
  strSQL:=getSQLByID(SqlID);

  //對SqlWhere條件進行解析
  ParseXMLWhere.XMLWHERE:=SQLWHERE;

  strWHERE:= ParseXMLWhere.SQLWhere;
  FreeAndNil(ParseXMLWhere);

  dsRead.Close;
  dsRead.CommandText:=strSQL;
  dsRead.Open;
  Data:=dsProvider.Data;
  dsRead.Close;

  //得到數據返回
end;

沒有留言:

張貼留言