如何重构程序启动代码?

问题描述:

我有一个类(Android Activity)处理启动我的应用程序。该应用程序有一些非常复杂的启动规则。现在它看起来像一堆意大利面,我正在寻找重构它的策略。如何重构程序启动代码?

老实说,这样的混乱我有问题的黑客提供伪代码。一般有开办一些规则在逻辑基本上编纂:

步骤:

  1. 检查错误在最后的出口,并刷新本地缓存如果有必要
  2. 下载设置文件
  3. 解析设置和设置保存到本地原生格式
  4. 使用设置的值,做了一堆“看家”
  5. 的使用设置的值,下载数据的核心成分A
  6. 解析组分A和加载了本地高速缓存

在这样的逻辑,其也更新所述用户界面。所有这些都是在一个曲折的单一整体课堂中处理的。它很长,它有一堆依赖关系,逻辑很难遵循,它似乎触及了应用程序的太多部分。

是否有可用于分解程序启动代码的策略或框架?

+0

你有没有尝试将东西提取到一个类中,并使用类似Roboguice的东西注入该类? – smk 2013-02-22 02:24:27

没有更多的细节,我能想到的唯一建议是将完成结构化功能的各个步骤分组,这些功能只完成一件事和一件事。

你的6个步骤看起来是你的init函数应该有的6个函数的一个好的开始。如果#2是同步的(我怀疑它),我会将#2,#3合并到一个getSettings函数中。

嗯。根据你的步骤,我看到各种不同的“关注”:

  1. 阅读和保存设置。
  2. 从服务器下载设置和组件(不知道这里是什么“组件”)。
  3. 读取和实例化组件。
  4. 刷新并读取缓存。
  5. 管家(不知道这一切是什么)。
  6. 用户界面更新(不太确定这需要什么)。

你可以尝试分裂的代码转换成各种物体沿着上述的线路,例如:

  1. SettingsReader
  2. ServerCommunicationManager(?)
  3. ComponentReader
  4. 缓存

不知道约5和6,因为我没有太多去那里。

关于框架,好吧,有各种各样的,如前面提到的Roboguice,可以帮助依赖注入。这些可能会派上用场,或者只是手工操作可能更容易。我认为,在你考虑依赖注入之前,你需要解开代码。所有依赖注入框架所做的就是为你初始化你的对象 - 你必须首先确定这些对象是有意义的。

+0

感谢您的深思。我想我有点想知道是否有一些策略来包装程序规则并将它们转化为对象? – 2013-02-23 01:44:46

+0

当然。我要做的是看看程序正在处理的事物的类型。例如,您以“动词名词”(“刷新缓存”,“下载设置”等形式)列出了一堆内容。你的[名词](http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html)是一个类:因此,缓存,设置等有时你有应用一层抽象并组合功能 - 例如,您可能不希望您的设置直接下载(或者您可能会这样做)。也许有一些处理所有下载的通用代码。 – 2013-02-23 14:47:18