我有一个MVC结构,我在JPanel类中设置JPanel的颜色。我想知道两种替代方案中哪一种是最佳解决方案。
备选方案2听起来对我来说是一个更好的解决方案,但不知道它是否有很大的不同,因为两者都在工作,所以如果是这样,为什么?
非常感谢!
替代方案1:
控制器类
在运行线程中:
theView.getPanelClass().getPanel().setBackground(new Color(255));
查看课程
private final PanelClass panel = new PanelClass();
public PanelClass getPanelClass() {
return panel;
}
面板类(在视图中声明)
JPanel thePanel = new JPanel();
public JPanel getPanel() {
return thePanel;
}
替代方案2:
控制器类 在运行线程:
theView.setPanel(new Color(255));
查看课程
private final PanelClass panel = new PanelClass();
public void setPanel(Color col) {
panel.setThePanel(col);
}
面板类(在视图中声明)
JPanel thePanel = new JPanel();
public void setThePanel(Color c) {
thePanel.setBackground(c);
}
更新 我现在编辑了我的代码,如下所示,视图类通过JPanel类设置颜色。
替代3:
控制器类 在运行线程:
if(x>y) {
theView.setPanel(1);
} else {
theView.setPanel(2);
}
查看课程
private final PanelClass panel = new PanelClass();
public void setPanel(int n) {
panel.setThePanel(n);
}
面板类(在视图中声明)
public void setThePanel(int n) {
switch (n) {
case 1:
panelS1.setBackground(new Color(255));
break;
case 2:
panelS1.setBackground(new Color(0));
break;
}
}
答案 0 :(得分:1)
这是合同决定。如果您同意开发人员有责任了解您的观点内部,并且在设置背景颜色之前他了解getPanelClass()
和getPanel()
是可以接受的,那么解决方案(1)是可行的。
如果您认为期望程序员了解实施细节是侮辱性的,那么您最好选择(2)。
现在,可能有理由,但为什么要设置控制器的颜色?难道这不是一个纯粹由观点本身做出的决定吗?将视图与控制器分开的整个目的正是为了不干扰这种决定。如果您决定使用其他组件更新x年中的视图,您确定它还具有背景颜色设置器,该怎么办?如果是这样,请确保您当前的视图实现了一个" ViewWithBackgroundColorSetter"接口例如。
你知道我有点扩张,但你的问题比你想象的要深刻。
答案 1 :(得分:1)
第一种选择似乎违反了所谓的好莱坞原则。我宁愿选择第二种选择