所以我一直在试着看看如何才能最好地构建我的代码,因为我有一种直观的感觉,必须有一种更好的方法来实现我想要的东西,而不会将单个对象传递给几乎每个UI类。项目
我正在开发的项目有一个扩展JRootPane的类RhythmWheel
。然后构造函数继续创建形成RhythmWheel的所有组件。例如,它创建了ControlPanel
的实例(扩展了JPanel)并将其添加到自身。
然而,ControlsPanel
需要在RhythmWheels中定义很多知识,比如当前选择的车轮数量。目前ControlsPanel
的构造函数将RhythmWheel作为参数,然后保留对它的引用。它将这个用于组件a JFileChooser
应该作为父项的范围,并作为将应用程序的重要状态写入XML文件的函数的参数。
我似乎错误地认为我在这么多课程中传递了一个主要组件。我考虑过设计模式,并认为单例可能是解决方案。然而,我已多次读过单身人士是邪恶的并且是反模式的。我想MVC模式可能会有所帮助,但我不确定如何在Swing中实现它。最近我遇到了依赖注入作为一种可能的解决方案。
我对自己应该做的事情有点失落,或者我是否应该做任何事情。如果你想看看我正在处理的代码,你可以在https://github.com/vamega/RhythmWheels看到它,所以任何有关如何继续的建议都会很棒。
答案 0 :(得分:1)
如果所有内容都需要RhythmWheel
的引用,那么听起来RhythmWheel
非常复杂。也许你可以将RhythmWheel
分解成一个组件集合(希望,并且可能,因为GUI应该反映逻辑结构)对应于GUI的特定部分?
另外,为什么所有GUI组件都会引用RhythmWheel
(或者如果你按照上面的描述进行重构,那么适当的子组件)?我没有做太多的春季编程,但我认为这个想法是围绕observer pattern构建事物。在这种情况下,gui组件应该在车轮组件上注册为观察者,以便在车轮更换时更新。
是的,这是mvc。车轮组件构成您的模型; gui是你的看法。不太清楚的是控制器是什么。我怀疑它是高级别的车轮。
所以,总结:
只有视图的输入部分需要参考车轮;显示部件通过轮子子部件注册的回调触发。
(为了直接回答原始问题,我没有看到任何通过轮子实例的东西如此糟糕,但正如我上面所说,它可能更好地“碎片化”成不同的组件,因为它“低” “进入GUI。”
答案 1 :(得分:0)
我没有看到使用单身人士有什么问题。控制面板听起来像单身人士的主要候选人。为什么你会不止一个?其他人也一样。您当前从ControlPanel
RhythmWheel
访问的任何内容都可以通过getter和setter公开。
除非您想要解耦的模型/视图分离或需要观察模型更新的视图,否则我不会使用MVC。