Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 接受者和接受者选择_Java_Getter Setter - Fatal编程技术网

Java 接受者和接受者选择

Java 接受者和接受者选择,java,getter-setter,Java,Getter Setter,我有一个MVC结构,我在其中设置JPanel类中JPanel的颜色。我想知道这两个选择中哪一个是最好的解决方案 通过将带有getter的方法转发到Panel类来设置控制器类中的颜色 使用设置器在Panel类中设置颜色,如备选方案2所示 对我来说,备选方案2听起来是一个更好的解决方案,但我不知道是否有很大的区别,因为两者都起作用,所以如果是这样,为什么 非常感谢 备选方案1: 控制器类 private final PanelClass panel = new PanelClass(); pub

我有一个MVC结构,我在其中设置JPanel类中JPanel的颜色。我想知道这两个选择中哪一个是最好的解决方案

  • 通过将带有getter的方法转发到Panel类来设置控制器类中的颜色
  • 使用设置器在Panel类中设置颜色,如备选方案2所示 对我来说,备选方案2听起来是一个更好的解决方案,但我不知道是否有很大的区别,因为两者都起作用,所以如果是这样,为什么

    非常感谢


    备选方案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语句,我有不同的颜色。如果(xy){theView.getPanelClass().getPanelS2().setBackground(新颜色(0,0,0));}我想我的评论仍然有效。但它可能会扩展到这个问题之外,因为它似乎有一个更广泛的架构问题。我鼓励你考虑代码复查。谢谢你的观点。对不起,我是新来的。你的意思是在这里也发同样的问题吗?我实际上是指一般的方式。我不确定他们的发帖政策,这可能是个好主意:-)我很高兴你能积极接受!这是这个领域的发展方向。祝你好运和快乐,是的,但你是否考虑了谁或应该做什么的责任?视图很可能应该观察x/y比较,并基于它更新自身。控制器应该做的只是提供信息,而不是视图更新本身。谢谢。Im从控制器设置颜色的原因是,根据if语句,我有不同的颜色。如果(xy){theView.getPanelClass().getPanelS2().setBackground(新颜色(0,0,0));}我想我的评论仍然有效。但它可能会扩展到这个问题之外,因为它似乎有一个更广泛的架构问题。我鼓励你考虑代码复查。谢谢你的观点。对不起,我是新来的。你的意思是在这里也发同样的问题吗?我实际上是指一般的方式。我不确定他们的发帖政策,这可能是个好主意:-)我很高兴你能积极接受!这是这个领域的发展方向。祝你好运,代码编写愉快你能说一般来说,将一个方法从一个地方调用转发到另一个方法通常不是一个好主意吗?例如view.method2().method3();这是应该避免的,但作为每一个原则,它也应该被视为一粒盐。这意味着你不能仅仅为了遵守这个原则而强迫它。你能说一般来说,转发一个方法调用