Dra*_*mon 7 model-view-controller swing design-patterns
我想使用MVC来构建我的Swing应用程序,但似乎存在冲突.
据我了解MVC,控制器应处理输入并更新模型.该模型应通知其观察者视图是哪一个.
我有两个问题
我敢肯定这个问题以前已经解决了很多次,但我找不到一个真实世界的例子,它是一个体面大小的基于MVC的摇摆应用程序.
更新 - 我忘了一个问题
MVC没有直接满足的是应用程序层次结构中各种MVC组件的结构.例如,主显示器可以具有"销售"和"购买"标签,每个标签可以具有"新"和"查询"面板.最重要的是,可能会有一个"修改选定"按钮,可以根据请求创建(可能是多个)窗口.
必须根据请求为这些子组件创建模型,视图和控制器.它不能是控制器或模型的控制器,因为它们不知道要创建哪个视图,因为它是应用程序逻辑并且它响应事件(这是控制器的工作),所以它不应该是视图.
有答案吗?
摇摆组件JButton等是控制器.视图类JButtonUI等.
至于将事件处理逻辑与"视图"代码分离,最简单的方法是在Controller所有面板中注入特定的类.这样,事件处理可能看起来像:
doStuffButton.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
controller.doStuff(); // logic in controller
}
});
Run Code Online (Sandbox Code Playgroud)
您的面板类可以提供Model给控制器,例如:
public void doStuff() {
MyData data = ...
dataModel.setData(data)
}
Run Code Online (Sandbox Code Playgroud)
这样控制器就会知道模型,并且视图知道控制器,但控制器不知道视图(实现)