【问题标题】:What is a useful abstraction/contract to assist Builder pattern to construct a MVC UI?什么是帮助 Builder 模式构建 MVC UI 的有用抽象/契约?
【发布时间】:2011-02-20 03:44:06
【问题描述】:

我的骰子模拟器会根据用户的输入和模型改变其 UI。我一直在尝试实现 Builder 模式来处理变化和可选参数,同时允许使用 GroupLayout。

目前我正在控制器中进行这样的调用:

if ((model.simRolls <> null) && (inputEvent.getSource == outputBtn) && (model.testType.equals("Success"))) {
    SimView outputScreen = new SimView.Builder(jframe, jpanel).testLabel("SUCCESS TEST OUTPUT", GroupAlignment.LEADING).outputLabel(model.simRolls, GroupAlignment.CENTER).actionButton("Next", GroupAlignment.TRAILING).build();
}

我讨厌 if 语句,因为它们种类繁多。谁能帮我理解我可以使用什么抽象、契约或接口来干净、准确地在 MVC 中构建所需的 UI?

【问题讨论】:

    标签: java model-view-controller abstraction builder contract


    【解决方案1】:

    与其尝试处理if-statement 中的无限组合,不如将子句分解成几个更细化的子句?这样,如果您添加更多新功能,则可以轻松地将另一个小子句添加到现有子句中,而不必担心忘记处理另一个组合。

    例如:-

    SimViewBuilder  builder = new SimViewBuilder(jframe, jpanel);
    
    if (model.simRolls != null) {
        builder = builder.actionButton("Next", GroupAlignment.TRAILING);
    }
    
    if (inputEvent.getSource == outputBtn) {
        builder = builder.outputLabel(model.simRolls, GroupAlignment.CENTER);
    }
    
    if (model.testType.equals("Success")) {
        builder = builder.testLabel("SUCCESS TEST OUTPUT", GroupAlignment.LEADING);
    }
    
    ... // add more if statements for other features and configure the builder accordingly
    
    // finally, build it
    SimView outputScreen = builder.build();
    

    【讨论】:

      【解决方案2】:

      通常,您安排视图将自己注册为模型的观察者,正如example 中所建议的那样。只有实际使用它的视图才能知道布局。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-16
        • 2011-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-18
        • 1970-01-01
        相关资源
        最近更新 更多