使用Java中的Swing在GUI开发中正确实现MVC模式

首先,我来自MVC的大背景,当我开始使用PHP时,我浏览了很多次,尝试用PHP完善我的MVC-Like设计。很多人都喜欢回答了很多帮助我的答案。


但是在Swing中开始GUI开发之后,关于Swing中MVC的答案是完全不同的。例如,模型也是一种观点?根据Oracle的建议 TextElementModel在这里没有任何逻辑业务,它所做的只是标记(设置颜色等)和设置数据,如设置文本等。当我用PHP开发时,没有这样的事情,AbstractModel因为我总是被告知模型不是一个类,或者更多,它是一个处理逻辑业务的整个层。


在PHP中,我使用了服务,数据映射器和域对象,这个惊人的答案提示我在PHP中帮助了我:如何在MVC中构建模型?


我的尝试

再次阅读之后,我想在Java中做一个类似的事情:


我有ControllerContainer创建所有控制器:


public class ControllerContainer {


    private JFrame frame;


    public ControllerContainer(JFrame rune) {

        this.frame = frame;

    }


    public void initControllers() {

        Atest test = new Atest(frame);

        test.registerView("test", new ViewTest(test));

    }


}

如您所见,我将带有实例的名为“test”的视图添加ViewTest到控制器中,现在它将在框架中可见,并且可以接受输入。


我的Controller班级,应该是抽象的,但我还没有把它抽象化:


public class Controller {


    private JFrame frame;


    private Map<String, Component> views = new HashMap<String, Component>();


    public Controller(JFrame frame) {

        this.frame = frame;

    }


    protected void registerView(String title, Component c) {

        this.views.put(title, c);

        this.frame.add(c);

    }


    protected void deregisterView(String title) {

        this.frame.remove(this.views.get(title));

        this.views.remove(title);

    }


    protected Component getView(String title) {

        return this.views.get(title);

    }

}

还有一个测试控制器:


public class Atest extends Controller {


    public Atest(JFrame frame) {

        super(frame);

    }


    public void hit() {

        ((ViewTest) super.getView("test")).changeColorBlue();

    }

}

问题

如您所见,我的视图创建了一个新按钮,并为其添加了一个鼠标侦听器。监听器将有权访问控制器以传递输入。控制器获取输入并更改视图。


基本上,控制器立即被迫更新视图,没有任何严肃的逻辑业务,因为在我的情况下不需要它。


根据我上面发布的链接,tereško回答,我如何正确使用他的想法和Java Swing的建议?


在PHP背景之后,我真的很困惑。


也许我是误解,一切都应该用不同的语言做不同的事情?但我认为模式应该始终以相同的方式实现。


如果您需要更多信息,请告诉我们。


一只斗牛犬
浏览 921回答 3
3回答

慕斯王

因此,如果我创建一个MVC程序,其中Model是一个将AVI转换为MP4的视频库,并且我在其上放置了一个视图并且它工作得很好。后来我想分发转换器库,所以有人想创建自己的视频转换器软件,但太糟糕了,因为该库取决于视图!所以这就是为什么第一种模式非常糟糕,需要一种特殊的才能来设计那种糟糕的模式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java