【问题标题】:How to refactor procedural start-up code?如何重构程序启动代码?
【发布时间】:2013-02-22 02:19:27
【问题描述】:

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

老实说,我在破解它以提供伪代码时遇到了问题。一般来说,创业有一些基本的逻辑规则:

步骤:

  1. 检查上次退出时的错误并在必要时刷新本地缓存
  2. 下载设置文件
  3. 解析设置并将设置保存为本地原生格式
  4. 使用设置中的值,做一堆“管家”
  5. 使用设置中的值,下载核心数据组件 A
  6. 解析组件 A 并加载本地缓存

在此逻辑期间,它还会更新用户界面。所有这些都在一个曲折的、单一的整体类中处理。它很长,有很多依赖,逻辑很难理解,而且似乎涉及应用程序的太多部分。

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

【问题讨论】:

  • 您是否尝试过将内容提取到一个类中并使用 Roboguice 之类的东西注入该类?

标签: java android refactoring


【解决方案1】:

嗯。根据您的步骤,我看到了各种不同的“担忧”:

  1. 读取和保存设置。
  2. 正在从服务器下载设置和组件(不确定这里的“组件”是什么)。
  3. 读取和实例化组件。
  4. 刷新和读取缓存。
  5. 客房服务(不太清楚这一切意味着什么)。
  6. UI 更新(也不确定这需要什么)。

您可以尝试按照上述思路将代码拆分为各种对象,例如:

  1. 设置读取器
  2. ServerCommunicationManager (?)
  3. 组件读取器
  4. 缓存

不确定 5 和 6,因为我没有太多内容要讲。

关于框架,有各种各样的框架,比如前面提到的 Roboguice,可以帮助进行依赖注入。这些可能会派上用场,或者手动执行此操作可能更容易。不过,我认为在考虑依赖注入之前,您需要解开代码。依赖注入框架所做的只是为您初始化对象——您必须首先确保对象有意义。

【讨论】:

  • 感谢周到的回复。我想我有点想知道是否有一些策略来包装程序规则并将它们变成对象?
  • 当然。我要做的是查看程序正在处理的事物的类型。例如,您以“动词名词”的形式列出了一堆东西(“刷新缓存”、“下载设置”等)。您的每个nouns 都是一个类:因此是缓存、设置等。有时您必须应用抽象层并组合功能——例如,您可能不希望您的设置直接下载自己(或者您可能会这样做) .也许有一些通用代码可以处理所有下载。
【解决方案2】:

没有更多细节,我能想到的唯一建议是将结构良好的函数背后的各个步骤分组,这些函数只做一件事。

您的 6 个步骤看起来是您的 init 函数应该具有的 6 个函数的良好开端。如果 #2 是同步的(我对此表示怀疑),我会将 #2、#3 合并到 getSettings 函数中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 2017-03-07
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多