这是一个一般性的问题,但我会首先告诉你我的具体问题:
我正在为我的程序编写一个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的大规模布局。这表明我应该创建单独的类TitleLabel
,SequenceTextField
等,每个类都使用draw
方法,然后在drawGuiFrame
中使用Layout
方法调用所有这些draw
方法的类(我甚至可以创建这些新类可以扩展的抽象类)。
这还有其他一些直接优势。假设我想要合并一个复选框系统以及我的标签和文本区域。然后我可以将其声明为自己的类,并为其提供属性isOptionA
,isOptionB
等,以记录选中的复选框。
但我有点不愿意以这种方式实现GUI,原因有两个。首先,创建这么多新类会使代码库混乱,包含许多小.java
个文件。其次,这些将是非常“单一使用”类:我永远不会再使用代码,因为类将纯粹为这个特定的GUI设计。
那么 - 有多少课程太多了?是否可以创建许多只会因为你觉得应该成为类而只使用一次的新类?正如我所说,虽然我欢迎特定于这个特定问题的建议,但我也在寻找关于何时适合添加新类的更一般的指示。
答案 0 :(得分:8)
对我来说,单独的课程似乎是正确的方法。您可以在 packages , modules 和子模块中组织这些类,这样它们就不应该“混乱代码库”。 java中的大型应用程序很容易拥有许多类,这些类只能由单个应用程序使用。这就是java作为一种语言和java生态系统整体运作的方式。
在java中,通常认为你拥有的粒度级布局越多越好。
答案 1 :(得分:3)
我自己喜欢为每个新引入的概念创建一个类。通常一个类可以任意长,特别是如果你在其中使用大量硬编码数据。你必须注意神的物体http://en.wikipedia.org/wiki/God_object。
如果某个类中有太多逻辑,那么阅读就会变得困难得多。如果你觉得某个类变得太大,那么看看该类中是否有可以拥有自己类的逻辑。