首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这是不好的MVC设计吗?

这是不好的MVC设计吗?
EN

Stack Overflow用户
提问于 2013-02-28 18:40:13
回答 5查看 129关注 0票数 3

我想知道这是否不好;让视图了解控制器,这样它就可以委托视图中发生的操作等等,并且让控制器知道视图(这显然是正确的),但是这是双向关系,我想知道是否正确?我希望引用视图中的控制器,因为我希望将所有工作委托给控制器,并保持视图干净。

这是不是很糟糕的设计,如果是这样的话,我还能做什么不同的事情来实现同样的目标?

控制器:

代码语言:javascript
运行
复制
public class Controller {

    private View view;

    public Controller() {
        view = new View(this);
    }

    public void doSomeButtonAction() {
        // More code...
    }
}

视图:

代码语言:javascript
运行
复制
public class View implements ActionListener {

    private Controller controller;
    private Button button;

    public View(Controller controller) {
        this.controller = controller;

        // Code for initializing button reference etc.
    }

    @Override
    public void actionPerformed(ActionEvent event) {
        controller.doSomeButtonAction();
    }    
}
EN

回答 5

Stack Overflow用户

发布于 2013-02-28 18:43:56

稍后可能派上用场的一件事是删除Controller‘构造函数中的依赖项,将视图作为参数传递或使用setter。

代码语言:javascript
运行
复制
public class Controller {

    private View view;

    public Controller(View view) {
        this.view = view;
    }

    public void doSomeButtonAction() {
        // More code...
    }
}

这样,您的控制器不负责创建View。你的程序本身。)将负责创建它所需的View实现,并在创建Controller时注入它。这也将有助于测试是否要使用模拟视图或控制器。

您的视图负责用户程序交互。当它接收到某个用户输入时,它需要通知某个控制器,因此您必须有一个对它的引用。然后,View还应该为它的Controller字段设置一个设置器。通过这种方式,您可以构建两者并相互传递给对方。

票数 0
EN

Stack Overflow用户

发布于 2013-02-28 18:47:05

您有一个总体想法:将逻辑( actionPerformed()的实现)放到Controller中。视图将具有可见的小部件,例如,面板中的按钮。在我看来,这并不像"MVC“,而更像是"VC",没有一个数据模型在眼前。

这里没有足够的代码让我称之为“坏”。

票数 0
EN

Stack Overflow用户

发布于 2013-02-28 18:50:35

它不是MVC设计,MVC应该将模型、视图和控制器分层,以获得设计模式的好处。

看起来您正在使用JSF,所以您的View和Controller类实际上都是JSF中视图层的一部分。最好将它们重命名为PageAction、ViewFinder、ViewFrontController等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15143146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档