Java 接受者和接受者选择
我有一个MVC结构,我在其中设置JPanel类中JPanel的颜色。我想知道这两个选择中哪一个是最好的解决方案Java 接受者和接受者选择,java,getter-setter,Java,Getter Setter,我有一个MVC结构,我在其中设置JPanel类中JPanel的颜色。我想知道这两个选择中哪一个是最好的解决方案 通过将带有getter的方法转发到Panel类来设置控制器类中的颜色 使用设置器在Panel类中设置颜色,如备选方案2所示 对我来说,备选方案2听起来是一个更好的解决方案,但我不知道是否有很大的区别,因为两者都起作用,所以如果是这样,为什么 非常感谢 备选方案1: 控制器类 private final PanelClass panel = new PanelClass(); pub
备选方案1: 控制器类
private final PanelClass panel = new PanelClass();
public PanelClass getPanelClass() {
return panel;
}
private final PanelClass panel = new PanelClass();
public void setPanel(Color col) {
panel.setThePanel(col);
}
private final PanelClass panel = new PanelClass();
public void setPanel(int n) {
panel.setThePanel(n);
}
在运行线程中:
theView.getPanelClass().getPanel().setBackground(new Color(255));
theView.setPanel(new Color(255));
if(x>y) {
theView.setPanel(1);
} else {
theView.setPanel(2);
}
查看类
private final PanelClass panel = new PanelClass();
public PanelClass getPanelClass() {
return panel;
}
private final PanelClass panel = new PanelClass();
public void setPanel(Color col) {
panel.setThePanel(col);
}
private final PanelClass panel = new PanelClass();
public void setPanel(int n) {
panel.setThePanel(n);
}
面板类(在视图中声明)
备选方案2: 控制器类 在运行线程中:
theView.getPanelClass().getPanel().setBackground(new Color(255));
theView.setPanel(new Color(255));
if(x>y) {
theView.setPanel(1);
} else {
theView.setPanel(2);
}
查看类
private final PanelClass panel = new PanelClass();
public PanelClass getPanelClass() {
return panel;
}
private final PanelClass panel = new PanelClass();
public void setPanel(Color col) {
panel.setThePanel(col);
}
private final PanelClass panel = new PanelClass();
public void setPanel(int n) {
panel.setThePanel(n);
}
面板类(在视图中声明)
更新 我现在按照如下方式编辑代码,以便view类通过JPanel类设置颜色 备选方案3: 控制器类 在运行线程中:
theView.getPanelClass().getPanel().setBackground(new Color(255));
theView.setPanel(new Color(255));
if(x>y) {
theView.setPanel(1);
} else {
theView.setPanel(2);
}
查看类
private final PanelClass panel = new PanelClass();
public PanelClass getPanelClass() {
return panel;
}
private final PanelClass panel = new PanelClass();
public void setPanel(Color col) {
panel.setThePanel(col);
}
private final PanelClass panel = new PanelClass();
public void setPanel(int n) {
panel.setThePanel(n);
}
面板类(在视图中声明)
这是合同决定。如果您同意开发人员有责任了解视图的内部内容,并且在设置背景色之前,可以接受他了解
getPanelClass()
和getPanel()
,则此解决方案(1)是可行的
如果您认为期望程序员了解实现细节是一种滥用,那么您最好使用(2)
现在,这可能是有原因的,但是为什么要从控制器设置颜色呢?无论如何,这不应该是一个纯粹由观点本身做出的决定吗?将视图与控制器分离的全部目的正是为了不干扰此类决策。如果您决定在x年后用另一个组件更新视图,您确定它也会有一个背景色设置器吗?如果是这样,请确保当前视图实现“ViewWithBackgroundColorSetter”接口
你看,我有点夸张,但你的问题比你想象的要深入。这是一个合同决定。如果您同意开发人员有责任了解视图的内部内容,并且在设置背景色之前,可以接受他了解
getPanelClass()
和getPanel()
,则此解决方案(1)是可行的
如果您认为期望程序员了解实现细节是一种滥用,那么您最好使用(2)
现在,这可能是有原因的,但是为什么要从控制器设置颜色呢?无论如何,这不应该是一个纯粹由观点本身做出的决定吗?将视图与控制器分离的全部目的正是为了不干扰此类决策。如果您决定在x年后用另一个组件更新视图,您确定它也会有一个背景色设置器吗?如果是这样,请确保当前视图实现“ViewWithBackgroundColorSetter”接口
你看,我有点夸张,但你的问题比你想象的更深入。第一种选择似乎违反了所谓的好莱坞原则。我宁愿选择第二种选择第一种选择似乎违反了所谓的好莱坞原则。我宁愿选择第二个备选方案是的,但是你是否考虑了谁或应该做什么的责任?视图很可能应该观察x/y比较,并基于它更新自身。控制器应该做的只是提供信息,而不是视图更新本身。谢谢。Im从控制器设置颜色的原因是,根据if语句,我有不同的颜色。如果(x