Java 如何重构程序启动代码?

Java 如何重构程序启动代码?,java,android,refactoring,Java,Android,Refactoring,我有一个类(Android活动),用于处理我的应用程序的启动。应用程序有一些相当复杂的启动规则。现在它看起来像一堆意大利面条,我正在寻找重构它的策略 老实说,这真是一团糟,我很难把它破解成伪代码。一般来说,有些启动规则基本上是以逻辑形式编写的: 步骤: 检查上次退出时的错误,必要时刷新本地缓存 下载设置文件 解析设置并将设置保存为本地本机格式 使用“设置”中的值,执行一系列“内部管理” 使用设置中的值,下载核心数据组件a 解析组件A并加载本地缓存 在这个逻辑过程中,它也会更新用户界面。所有这些都

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

老实说,这真是一团糟,我很难把它破解成伪代码。一般来说,有些启动规则基本上是以逻辑形式编写的:

步骤:

  • 检查上次退出时的错误,必要时刷新本地缓存
  • 下载设置文件
  • 解析设置并将设置保存为本地本机格式
  • 使用“设置”中的值,执行一系列“内部管理”
  • 使用设置中的值,下载核心数据组件a
  • 解析组件A并加载本地缓存
  • 在这个逻辑过程中,它也会更新用户界面。所有这些都是在一个之字形的、单一的整体类中处理的。它很长,有很多依赖关系,逻辑很难理解,而且它似乎触及了应用程序的太多部分


    是否有一种策略或框架可以用来分解程序启动代码?

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


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

    Hmmm。根据您的步骤,我看到了各种不同的“关注点”:

  • 读取和保存设置
  • 从服务器下载设置和组件(不确定此处的“组件”是什么)
  • 读取和实例化组件
  • 刷新和读取缓存
  • 内务管理(不确定这一切意味着什么)
  • UI更新(也不确定这需要什么)
  • 您可以尝试按照上述思路将代码拆分为各种对象,例如:

  • 设置读卡器
  • 服务器通信管理器(?)
  • 组件阅读器
  • 缓存
  • 我不确定5号和6号,因为我在那没什么可谈的


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

    您是否尝试过将内容提取到类中,并使用Roboguice之类的工具注入该类?谢谢您深思熟虑的回答。我想我有点想知道是否有一些策略可以包装程序规则并将其转化为对象?当然。我要做的是看看程序所处理的事情的类型。例如,您以“动词-名词”的形式列出了一系列内容(“刷新缓存”、“下载设置”等)。你的每一个都是一个类:因此缓存、设置等等。有时你必须应用一个抽象层并结合功能——例如,你可能不想让你的设置直接下载自己(或者你自己下载)。也许有一些通用代码可以处理所有下载。