2011-06-06 32 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