首先,我来自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背景之后,我真的很困惑。
也许我是误解,一切都应该用不同的语言做不同的事情?但我认为模式应该始终以相同的方式实现。
如果您需要更多信息,请告诉我们。
慕斯王
相关分类