2013-08-06 60 views
0

我有一個Web服務,在設計時TWebModule上定義了越來越多的TWebAction項目,並且與OnAction事件相結合。如何將設計時TWebActions與TObjects的結構相鏈接?

請求是HTTP通過URL GET和響應「手工」 JSON數據,即在運行時用語句像'TSuperObject'.S['errormessage'] := lErrMsg;
組成我想改變這與JSON數據,然後將所有的請求/響應HTTP POST請求JSON結構使用SuperObject TSuperRttiContext AsJSONAsType方法正在(de)序列化到適當的對象(和可能的記錄)。

我該如何創建數據結構來映射/鏈接我的新'對象是JSON(德)序列化'與設計時間TWebactions?這些對象都是不同的(一些屬性可以在一個共同的祖先中),並且可以包含對象或記錄屬性本身(如SuperObject可以序列化的FData: Array of TSubObject)。

注意:已經有一個快速和非常髒的枚舉類型,我用它來收集時序統計信息(這些信息也需要維護),這也可以集成。

type 
    TWebAct = (
    ttinfo, 
    ttlogin, 
    ... 
    ttgetcostitemlist, 
    ttgetvacationplanning 
    ); 

基本上,我希望儘量減少每當添加新TWebAction時需要維護的位置數量。

回答

1

您可以使用TWebAct枚舉將一系列將Web操作綁定到其各自的請求和響應結構的記錄。

type 
    // ancestor class for all requests and responses 
    TJSONStructure = class(TObject); 

    TJSONRequest = class(TJSONStructure); 
    TJSONRequestClass = class of TJSONRequest; 

    TJSONResponse = class(TJSONStructure); 
    TJSONResponseClass = class of TJSONResponse; 

const 
    WEBACT_STRUCTURES: array[TWebAct] of 
    record 
     RequestClass: TJSONRequestClass; 
     ResponseClass: TJSONResponseClass; 
    end = (
     {ttInfo} (RequestClass: TInfoRequest; ResponseClass: TInfoResponse) 
    , {ttLogin} (RequestClass: TLoginRequest; ResponseClass: TLoginResponse) 
    ... 
); 
+0

最後一個良好的使用使用元類 - 讓我們來看看,如果我可以圍繞這些;-) –

+0

LOL讓我的頭,如果你需要幫助,只是發牢騷。我的頭現在很好地包裹着他們。 :) –

+0

我在這裏hollering http://stackoverflow.com/questions/18125462/how-to-call-object-method-for-any-object-in-my-metaclass –