2011-06-06 66 views
3

我正在寫一個android應用程序接收位置更新併發送請求到一個web服務。該應用程序有幾個活動,並使用本地服務作爲控制器。問題是這個'控制器'服務正在迅速變成Blob /上帝的反模式。我試圖找出折射代碼的最佳方法。如何重構包含許多偵聽器內部類的類?

幾乎所有的功能都是異步的,因爲http客戶端需要在單獨的線程中運行。大多數方法調用都會傳遞偵聽器來接收來自服務器的響應。位置更新也通過監聽器接收。所有這些監聽器當前都在我的本地服務中作爲內部類實現。我現在在我的本地服務中有大約10個內部類。我不明白我可以如何將這些監聽器移動到單獨的類中,因爲他們需要訪問存儲在服務中的狀態。我曾嘗試實現一個處理所有狀態的單例/觀察者混合類,接收來自每個監聽器的更新,然後將其傳遞給任何註冊的觀察者,但這不是一個好的解決方案,因爲它具有與全局狀態相關的所有問題,很難跟蹤節目從一個地方到另一個地方的流程。重新編寫,重構和重新編寫後,我現在完全困惑,不知道該怎麼做。有什麼建議?

+0

是否仍運行正常,因爲一個凝聚力單位?你可能將整個單元移植到另一個項目中嗎?類/服務中是否存在最少的代碼重複?如果是這樣,嘿,你已經贏了。僅僅因爲這個單位很大並不意味着它被重構是必要的。只是我的觀點。 – Eric 2011-06-06 23:41:36

回答

0

兩個想法。 1)通過摺疊事件處理程序並提供一個圖標來展開事件代碼部分,這種明顯的事件處理代碼膨脹隱藏在MS Net IDE中,並可選擇隱藏在Mac IDE中。所以我沒有看到事件處理代碼膨脹,並且它不會打擾我。眼不見,心不煩。

2)針對Android 1.6+,你可以重構爲XML屬性

<Button android:text="@string/get_plain_text_button" 
android:id="@+id/ButtonPlainText" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:onClick= "plainTextOnClickHandler"> 

對應於方法

public voidplainTextOnClickHandler(View v){ 
    editTextPlainText.setText("Plain Text Button Clicked"); 
} 

JAL

相關問題