3

我即将完成我们的考试项目,当回顾我的编码时,我觉得我做得很好。不过,事情显然总是会好很多。但也许这只是我。

我负责对 GUI 进行编码,并将其与应用程序逻辑相结合。在制作 GUI 时,我决定为每个窗口制作一个类文件(例如 LoginWnd.java),并在构造函数中实际构建 GUI。我将初始化所有内容并在此构造函数中设置所有数据。

然后为了浏览应用程序,我会在 jbutton 上设置 actionlisteners。例如,在 SearchWnd 中,点击“搜索”按钮将创建一个带有一些指定参数的 ResultWnd 新对象。

现在我有点想知道:这个设计决定有什么不好吗?有没有我应该知道的设计范式?

谢谢。

4

2 回答 2

4

总体而言,您的方法听起来不错-只要有效,您就已经实现了主要目标!所以我在这里的评论更多是关于微调/更广泛的设计方面。

如果在程序执行期间 GUI 不会随后发生变化,那么在构造函数中进行GUI 构造基本上没有错。这里的基本原理是,应为“一次性”建设活动保留建设者。因此,对于具有预定布局的对话框等可能没问题。

如果您有一个更加动态的 GUI,其中组件在整个程序执行过程中经常被添加和删除,那么我强烈建议将其移至构造函数之外的一组方法,以便可以独立于对象构造来调用它们。如果需要进行初始设置,构造函数本身仍然可以调用这些方法,但随后您可以稍后调用这些方法来添加新组件、刷新布局等。

好消息是,如果你弄错了这些东西并不难重构——如果需要,稍后将设置代码从构造函数中提取到单独的方法中通常是微不足道的。

要注意的另一件事是经常重复的口头禅“更喜欢组合而不是继承”。也就是说,如果您可以通过组装现有组件而不是继承和覆盖您的设计来使您的 GUI 工作,那么从长远来看,您的设计可能会更好/更容易维护。例如,我认为我从未对 JFrame 进行子类化——在其中添加包含所有应用程序特定组件的 JPanel 几乎总是更简洁。

最后,小心不要将您的 GUI 组件与您的应用程序逻辑耦合得太紧密。Swing 实际上在鼓励您将数据模型与表示代码分离方面做得很好(例如,使用ListModel 和朋友)。值得研究和理解这种方法。关键是您通常应该以与应用程序完全无关的方式构建 GUI 组件,但通过将它们连接到正确的数据模型和事件处理程序等来赋予它们特定于应用程序的行为。

于 2012-05-28T23:46:54.493 回答
0

我还在构造函数中初始化了我的 GUI,所以它不会很糟糕 :) 但是当它变得太长时,我会将部分代码提取到单独的 GUI 组件中。

于 2012-05-28T23:45:48.717 回答