2010-12-01 15 views
0

我有一個可以被稱爲無論是從GUI或形成非圖形環境(批處理模式)
更改代碼行爲取決於上下文

什麼是最方便的最佳實踐方式「告訴」類代碼的GUI相關部分在批處理模式下執行時不執行。

我覺得像

public MyMethod() 
    {    
     [@TAG: DOTHIS_ONLY_IF_GUIMODE] 
     ShowPanels(); 
     .... 
    } 

而且GUI_MODE_ACTIVATED將某處設置爲true或運行時錯誤,具體情況取決於程序從

叫我想避免醜陋的跟蹤,如果/其他東西散佈在我的代碼中。
我的小拇指告訴我AOP是要走的路(但如果我設法找到一個更簡單的替代方案,我會去的)
那麼,什麼是最簡單和最直接的方式來做到這一點?

更新: 由於大多數撰稿人指出,從業務代碼分離GUI代碼是一個經驗法則,但是,我還是想知道如何做到這一點,即使NO GUI參與(即兩種不同的模式,批了兩個不同的環境,例如)

回答

3

我認爲你最好的選擇是從類中取出特定於GUI的代碼,並實現在類的處理中的關鍵時刻觸發的事件。當由GUI調用時,GUI代碼將訂閱這些事件並「做正確的事情」。批處理代碼忽略事件並且一切正常。

0

什麼是最方便的最佳實踐方式「告訴」的代碼在批處理模式下執行不執行的GUI相關的部分。

這就是爲什麼您將業務邏輯問題與UI關注點分開的原因。

那麼,什麼是最簡單最直接的方法呢?

單獨的業務邏輯關注UI關注點。

+0

我知道,但我沒有真正的選擇,我有遺留代碼,我必須應付它。 – 2010-12-01 20:30:14

+0

@Mika Jacobi:你的意思是你沒有選擇?你顯然現在正在重構。 – jason 2010-12-01 20:32:25

+0

這比這更復雜一點,應用程序的體系結構非常嚴格,我不掌握所有的後果(因爲代碼被其他應用程序調用,暫時超出我的範圍),所以我更喜歡謹慎。 – 2010-12-01 20:42:13

0

最簡單也最直接的方法是使用if語句。

一種較簡單但結構更爲簡單的方法是將ShowPanels方法抽象出來,然後派生兩個類:一個用於GUI模式,另一個用於批處理模式。

0

Add Aspects to Object Using Dynamic Decorator

您的課程只應關注業務邏輯而非演示(GUI或批處理等)。在運行時,您可以根據需要將演示文稿(GUI或非GUI)代碼附加到類的對象。

不需要在類定義中包含醜陋的屬性代碼。