2013-07-12 55 views
1

我正在尋找一種方法來記錄方法調用,將其存儲在數據庫中,然後在稍後執行它。是否有方法來序列化方法調用

我正在考慮序列化所有參數的方法調用,存儲它,然後檢索它,反序列化它並執行一些操作。

所以,我正在尋找一種通用的方法,可以讓我用它的參數存儲方法調用。類似於

public String myMethod(String arg1, String[] arg2) { 

    logMethodCall(thisMethodName, allMethodArgumentsSerialized) 

} 

logMethodCall會將信息存儲在數據庫中。

所以

一)任何代碼,讓我來動態循環的方法的所有參數和序列化呢?

b)動態獲取當前方法名稱的任何代碼?

c)任何其他的想法來完成類似

+4

有*很多*更好的方式來處理這個。你能指定你的實際使用案例,所以我們可以幫助建議一個適當的選擇? –

+0

即使您有適當的解決方案,稍後再次調用該方法也只會使用相同的參數重新調用相同的方法,這會重新排列相同的參數和方法名稱。那麼,有什麼意義? –

+0

@JBNizet我打算用一些條件來包裝logMethodCall:if(condition){logMethodCall(thisMethodName,allMethodArgumentsSerialized)} else {do rest of code} ....或者類似的東西 – user2287359

回答

0

我還沒有看到這種模式之前,您保存方法調用數據庫的東西。我看到延遲的方法調用和遏制方法調用,但這些調用總是在運行的應用程序中,它們不能持續存活。

如果您希望將來可以執行的持久性操作,我認爲正確的方法是創建某種操作或編輯對象,方法與javax.swing.undo.AbstractUndoableEdit作品。然後你可以從任何地方登錄這些文件,並從任何地方執行它們。這些行動可以在幾方面工作,包括:

  • 存儲對象類型,方法名和通用參數,並執行那些後來
  • 提供具體的參數,並調用預定方法名

我會像Swing那樣與基類一起工作,所以從你的例子中你將得到一個myMethodAction類,其對象將參數作爲屬性並知道何時通知execute它應該調用myMethod

我也沒有myMethod執行這兩件事情。那將是一個非常頭痛的問題。寧可有類似

public void myMethod() 
{ 
    if(condition) ... save it ... 
    else myMethodNow(); 
} 

public void myMethodNow() 
{ 
    ... do the work now ... 
} 

希望有所幫助。

1

這聽起來像Command模式,其中實際的命令對象是被保留的(可能序列)被執行之前:

命令模式是在其中一個對象被用於表示和行爲設計圖案封裝以後調用方法所需的所有信息。此信息包括方法名稱,擁有該方法的對象以及方法參數的值。

+1

使用命令模式設計代碼也提供了更多的靈活性 - 請務必查看它! –

0

好吧,我敢說,處理像Lisp這樣的東西的自然語言。 「代碼=數據」,正如他們所說。

如果需要使用Java(例如,如果這只是Java中較大系統的一小部分),請考慮使用ABCL(一個針對JVM的Lisp實現)。

你可以花很多時間試圖將一個方形釘子楔入一個圓孔,或者只是簡單地做到這一點;這是你的選擇。我真的不認爲這是消極的方式;這只是一個觀察。

相關問題