7

这是一个一般性问题,但我会先给你我的具体问题:

我正在为我的程序编写一个 GUI,该程序将采用框架的形式,上面放置有各种小部件(标签、文本字段等)。它最初将使用该javax.swing库,但我在库和 GUI 本身之间建立了一层抽象,以便更轻松地创建执行相同操作的 Web 应用程序。

我想要一个代表 GUI 布局的类:也就是说,它应该包含有关各种标签、按钮等放置在内容窗格上的位置的所有信息。目前,我正在考虑的实现如下:

class Layout
{
  public MyLabel titleLabel;
  public myTextField sequenceTextField;
  [...]

  public void drawTitleLabel()
  {
    titleLabel = new MyLabel("This is the title.");
    titleLabel.setLocation(wherever);
    titleLabel.draw();
  }

  public void drawSequenceTextField()
  {
    sequenceTextField = new MyTextField();
    [...]
    sequenceTextField.draw();
  }

  [...]

  public void drawGuiFrame()
  {
    drawTitleLabel();
    drawSequenceTextField();
    [...]
  }
}

因此,我将内容窗格上的每个小部件声明为类的一个字段Layout,然后创建drawWidgetName绘制每个小部件的方法。最后,我创建了一个方法来调用每个draw...方法以绘制整个 GUI。

不过,这似乎是错误的。这些draw...方法感觉好像它们应该是单个小部件本身的方法,而不是整个 GUI 的大规模布局。这表明我应该创建单独的类TitleLabelSequenceTextField,每个类都有一个draw方法,然后drawGuiFrameLayout类中只有一个方法来调用所有这些draw方法(我什至可以创建一个抽象类,这些新类可以扩展)。

这还有其他一些直接的优势。假设我想合并一个复选框系统以及我的标签和文本区域。然后我可以将它声明为它自己的类并赋予它 propertiesisOptionAisOptionB来记录选中了哪个复选框。

但我有点不愿意以这种方式实现 GUI,原因有两个。首先,创建如此多的新类会使代码库中包含大量小.java文件。其次,这些将是非常“一次性”的类:我永远不会再使用代码,因为这些类将纯粹为这个特定的 GUI 设计。

那么 - 多少类太多了?是否可以仅仅因为您认为它们应该是类而创建许多只会使用一次的新类?正如我所说,尽管我欢迎针对这个特定问题的建议,但我也在寻找更多关于何时适合添加新类的通用指针。

4

2 回答 2

9

拥有单独的课程对我来说似乎是正确的方法。您将类组织在模块子模块中,因此它们真的不应该“弄乱代码库”。java 中的大型应用程序可以轻松地拥有许多类,这些类可能仅由该单个应用程序使用。这几乎就是 java 作为一种语言和 java 生态系统作为一个整体的工作方式。

在java中,通常认为你拥有的类布局越细越好。

于 2013-07-29T14:44:36.870 回答
3

我自己喜欢为每个新引入的概念创建一个类。通常一个类可以任意长,尤其是当你在其中使用大量硬编码数据时。您将不得不提防上帝对象http://en.wikipedia.org/wiki/God_object

如果某个类中有太多的逻辑,它就会变得更难阅读。如果您觉得某个类变得太大,请查看该类中是否存在可以拥有自己的类的逻辑。

于 2013-07-29T14:45:07.610 回答