java - 多少类太多了?什么时候适合添加新类?

标签 java oop user-interface

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

8 年前关闭。




Improve this question




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

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

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

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();
    [...]
  }
}

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

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

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

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

那么 - 多少课太多了?仅仅因为你觉得它们应该是类,就可以创建许多只使用一次的新类吗?正如我所说,虽然我欢迎针对这个特定问题的建议,但我也在寻找关于何时适合添加新类的更一般性的指示。

最佳答案

拥有单独的类(class)对我来说似乎是正确的方法。您在包、模块和子模块中组织类,因此它们真的不应该“弄乱代码库”。 Java 中的大型应用程序很容易拥有大量可能仅由该单个应用程序使用的类。这几乎是 Java 作为一种语言和 Java 生态系统作为一个整体的工作方式。

在java中,通常认为类布局越细粒度越好。

关于java - 多少类太多了?什么时候适合添加新类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17926918/

相关文章:

java - 如何在最简单的情况下正确配置spring security?

c# - 坚持对象创建

php - 如何在 PHP 中创建一个自然的 String 类

Android 从右到左 NavigationDrawer 菜单项不是 RTL

user-interface - 无障碍对比度与企业形象指南

JavaScript - 如何在不使用 alert() 或 window.open() 的情况下创建对话窗口?

java - 生成实现接口(interface)的 JAXB 类

java - 阻止其他线程运行一段代码

java stacktrace 显示一个阻塞的线程,但没有关于阻塞它的信息

c++ - 使类构造函数私有(private)