如何重构包含许多侦听器内部类的类?

时间:2011-06-06 22:59:54

标签: android refactoring design-patterns

我正在编写一个Android应用程序,它接收位置更新并将请求发送到Web服务。该应用程序有几个活动,并使用本地服务作为控制器。问题是这种“控制器”服务正迅速变成Blob / God反模式。我正试图找出折射代码的最佳方法。

几乎所有功能都是异步的,因为http客户端需要在单独的线程中运行。大多数方法调用都会传递侦听器以从服务器接收响应。还通过收听者接收位置更新。所有这些侦听器当前都在我的本地服务中实现为内部类。我现在在本地服务中有大约10个内部类。我不知道如何将这些监听器移动到单独的类中,因为它们需要访问存储在服务中的状态。我已经尝试实现一个处理所有状态的单例/观察者混合类,从每个侦听器接收更新,然后将其传递给任何已注册的观察者,但这不是一个好的解决方案,因为它具有与全局状态和很难跟踪程序从一个地方到另一个地方的流程。重写,重构和重写后,我现在完全迷茫,不知道该怎么做。有什么建议吗?

1 个答案:

答案 0 :(得分: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