为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只斗牛犬 2019-09-03 19:41:52
首先,我来自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背景之后,我真的很困惑。也许我是误解,一切都应该用不同的语言做不同的事情?但我认为模式应该始终以相同的方式实现。如果您需要更多信息,请告诉我们。
查看完整描述

3 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

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

查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 920 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信