1

我正在制作一个客户管理软件。有几个 JPanel 上面有很多内容,不断与数据库通信。数据库中是客户数据、产品等。
为了更快地访问数据库数据,首先我将它们全部加载到它自己的 ArrayList 中,例如ArrayList<Customer>. 如果用户更改此数据,则必须在类和数据库中更改。
由于 JPanelView看起来非常“完整”(挤满了其他 JPanel 和 JTabbedPanes,使用 CardLayout 切换),我认为最好为每个“主” JPanel 创建一个自己的类并将它们全部链接到View.
例如 JPanel 的一个自己的类,Customer可以查看和编辑所有客户数据,产品等也是如此。

有意义还是不方便?我只想这样做是为了外包代码并使类更清晰,尤其是View.
有没有类似设计模式的东西来处理这个问题?

4

2 回答 2

6

所以你的程序由一个单一的类组成,它是 JPanel 的子类,并且包含对你 UI 中使用的所有其他组件的引用?而且您想知道是否应该将该 UI 的某些部分分解为其他类。

总之是的。您始终可以通过将部分代码移出到新类中来将任何类分解为聚合类,并使原始类包含对新类的引用。这称为委托或提取类重构。您可以在 Martin Fowler 的 Refactoring 书中了解此技术。

创建作为整个 UI 一部分的其他 UI,例如 CustomerPanel,是一种很好的思考方式。通过这样做,您还可以解耦 UI 的各个部分。创建这些较小的类以将所有依赖项移动到新类时要小心。如果您想将主 UI 的引用传递回聚合类,那么您可能还没有完全解耦您的类。这应该表明您没有对要提取的类承担足够的责任,或者它们应该共享一些其他依赖项。

基本上规则是如果你提取一个类,它不应该有对包含它的类的引用。参考应该更像是一棵树而不是图表。他们可以共享模型类,但不能在视图之间创建循环。

您可能会觉得这很有趣: 摇摆的 GUI 指南

于 2012-04-06T20:41:58.497 回答
1

我不确定我是否理解您的意图,但看起来您想要实现分解级别,这将允许您外包某些 UI 组件并重用它们,嗯,基本上实现尽可能低的耦合。除了@chubbard 所说的之外,我建议您研究MVP模式并在组件之间使用基于事件的交互,而不是引用它们。这可以消除不必要的依赖并带来更多的可重用性。

于 2012-04-06T20:47:43.113 回答