【问题标题】:Huge java class for android project, how to split it up?android项目的巨大java类,如何拆分它?
【发布时间】:2012-08-01 17:39:37
【问题描述】:

在 C++ 中,我习惯于使用范围解析运算符 (::) 将类拆分为多个文件,但在 java 中,似乎无法在多个文件之间拆分一个类。

我读到类不应超过几百行,但这听起来像是不编写重要应用程序的人的意识形态废话。

我正在编写一个工业 Android 应用程序(不是针对消费者,而是针对使用专业测试和测量设备以及通过蓝牙链接的应用程序的技术人员)并且我的几个 android 活动的长度超过 1000 行,我什至没有接近完成。主要活动超过 6000 行,我希望它会变得更长......它变得非常笨拙,就像我说的,在 C++ 中,我只会在多个源文件中逻辑拆分类,但我想这不是选项在这里。

是否有任何替代方法可以减少我的源文件的长度而不实际剪切代码(这不是一个选项...)?

【问题讨论】:

  • 类不超过几百行,虽然不是硬性规定,但很好地表明了良好的设计。我编写了具有数万个类的后端服务器应用程序,我们管理得很好,将其中的 99% 保持在该准则范围内。换句话说,如果您发现这是一个问题,那么您很有可能应该重新设计您的类。
  • 也许是我对 java 的缺乏经验,但所有这些代码都与类扩展的 android 活动有关(公共类,无论扩展 Activity...)。很多代码是与 android 活动相关的事件处理程序,我将如何在不同的类之间拆分?我想这真的是我的问题。
  • 我想这些事件处理程序本身可以(并且应该)是独立的类。您还可以将大量实用程序代码提取到外部类中(将其视为创建命名空间以对相似或相关的方法进行分组)。
  • 嗯...我想我有一些研究要做。我假设与活动相关的所有代码都必须包含在该活动的类中。这个问题可能很幼稚,并且由于我对 Java 和 Android 编程缺乏经验(我来自 C/C++/ASM 固件背景,有点投入到这个项目中,但从中获得了很多乐趣)

标签: java android class android-activity


【解决方案1】:

100 行以上的类是可以接受的(我写的大多数类都超过 100 行)。问题是,处理面向对象的语言时,应该尽可能地进行分类,使代码maintainableintuitivereadable。祝你的应用好运!

【讨论】:

    【解决方案2】:

    你可以继承你的类。创建具有核心功能的基类并将其子类化。所以你可以有几个文件,最后你只有一个可以使用的类。

    【讨论】:

    • 为了做到这一点(我认真地认为你不应该这样做,为此目的进行子类化似乎很疯狂),同时确保你不能最终得到一个丢失大量方法的损坏实例您至少应该使除层次结构中的最后一个类之外的所有类都是抽象的。
    • 我认为将一个类拆分为多个文件根本不是一个好主意;)。但是子类化可以解决问题。最好的办法是重新考虑班级设计,将大班分成几个小班。
    • 我会研究子类化,以前从未听说过,但至少现在我有一些东西可以谷歌 :)
    【解决方案3】:

    您仍然可以使用组合和实现技术。 Java Package 与 C++ Namespace

    相同

    【讨论】:

      【解决方案4】:

      您为什么不尝试在不同的类中分离常见的东西,然后在您的活动中使用这些类的实例?类似于command pattern,但更简单一些。

      【讨论】:

      • 我认为与 android 活动(OnTouch、OnItemClick 等)相关的 On() 方法必须包含在实现该活动的类中,不是这样吗?例如,这是我的活动类之一: public class SomeClass extends Activity implements OnClickListener, OnTouchListener, OnSeekBarChangeListener, OnGlobalLayoutListener, OnLongClickListener, OnItemClickListener 然后我有处理这些事件的方法,这些方法不是必须在同一个类中吗?我的一些活动处理更多的事件,这些处理程序中的代码可能很长​​span>
      • 嗯,你可以这样做,但你不必必须这样做。您可以为每个侦听器设置一个类,并在那里实现您的行为。您的活动可能是您的听众的参数。实际上,您可以拥有一个具有多个侦听器接口(甚至是所有侦听器接口)的类,但它不一定是您的活动。
      • 我明白了,谢谢,我会尝试弄清楚如何将其拆分...我实际上希望每个侦听器有一个类来处理触发该侦听器的所有视图(例如,所有触发 OnClick 事件的按钮都将由一个类处理,该类只处理我整个应用程序的所有 OnClick 事件)
      • 如果您的“onClick 事件”对整个应用程序(或大部分应用程序)具有相同的操作,最好将其保存在单独的类中。这样做将使您的代码更干净,并且可以按照您的意愿进行拆分:) 您应该更好地了解 Java 功能,例如子类、静态字段、组合等等,但这是一个好的开始! :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      相关资源
      最近更新 更多