【问题标题】:MVC Basic Concept (System with 3 Classes?) [duplicate]MVC 基本概念(具有 3 个类的系统?)[重复]
【发布时间】:2018-11-19 18:08:40
【问题描述】:

我很难理解模型视图控制器的概念。

据我所知,这个模型的目的是将整个系统分成 3 个部分。一部分负责数据和行为和数据,一部分负责UI,另一部分负责两者之间的交互。

但这是我的问题:我如何从一个大项目的概念到实施?

我的老师有这个只有 3 个类的 UML 类模型,但是整个系统的行为怎么可能是一个类呢?

模型类更像是所有模型都必须实现的接口吗?

为什么这个问题不同:当你有一个类可以完成你所有的事情(比如计算器)时,我知道模型是如何工作的,但是如果我需要多个类来实现更复杂的系统怎么办? em>

希望你们能得到我的问题

【问题讨论】:

  • 我不确定我们是否做哥们,尤其是这句话:My Teacher had this UML Class Model where there are only 3 Classes, but how can the behavior of the whole System be ONE Class?,你能详细说明一下吗?

标签: java model-view-controller


【解决方案1】:

MVC 是复合模式之一,即它由其他三种设计模式组成:

  1. 策略 - 在这里,Controller 提供了处理来自 View 的用户输入的方法。 View 将用户所做的操作委托给 Controller,Controller 知道该做什么。

  2. Observer - Controller 和 View 需要知道 Model 何时发生变化,因此 View 是可观察的,另外两个是观察者。稍作修改可能是定义一个观察者 - 控制器并使其根据更改更新视图。

  3. 复合 - 它是一种表示 GUI 的方式。

了解这三种模式,然后您将全面了解如何实现更复杂的系统。

另外,你可以用谷歌搜索:MVC as compund pattern

【讨论】:

  • 其实我喜欢把 MVC 看成是中介者模式的一个具体实例:Controller 在 View 和 Model 之间进行中介
【解决方案2】:

模型代表应用程序中实现逻辑、管理数据和定义应用程序行为的部分。模型响应:

  • 视图信息请求更新它的状态
  • 从控制器更改状态的指令。

视图再现了模型的内容。它准确地指定了模型数据应该如何呈现。每当模型数据发生变化时,视图必须根据需要更新其表示。

控制器负责处理用户请求。它是客户端和系统之间的链接,并确保正确委派完成任务所需的所有资源。

一旦控制器知道需要执行哪个操作,它就会将渲染过程委托给 View 层。

换句话说,用户使用控制器。控制器操纵模型。模型会在特定请求后更新用户看到的视图。

关于实现,您可以为控制器设置一个类,该类包含对模型管理器类的引用,并根据用户请求调用该对象引用上的方法。例如:

    case "List":
           view.show("" + model.getAll());
           break;
    case "Add":
           String input = view.get("title");
           String input1 = view.get("artist");
           String track1 = view.get("Track title");
           String track2 = view.get("Track artist");

           if (input == null) return;
           String msg= "";
           view.show(msg);
           CdTrack  cdTrack = new CdTrack(track1, track2, new Time(0,0,0));
           CdTrack[] cdsTrack = {cdTrack};
           model.addCd(new Cd(input,input1,cdsTrack));
           view.show(msg);
           break;

视图类应该将请求传递给控制器​​。例如:

@Override
   public void actionPerformed(ActionEvent e)
   {
       if(((JButton) e.getSource()).getText().startsWith("List"))
           controller.execute("List");
       if(((JButton) e.getSource()).getText().startsWith("Add"))
           controller.execute("Add");
   }

【讨论】:

  • 但是“代表部分”是什么意思。模型是 ONE 类还是多个类的接口或模块?
  • 用“表示部分”我基本上是指“是部分”(模型实现应用程序的逻辑)。通常你会有一个类实现一个接口,该接口包含应用程序的所有方法。例如,如果您想在模型类中实现 CRUD 操作,这些方法将在模型类稍后实现的接口中声明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 2011-06-07
  • 1970-01-01
相关资源
最近更新 更多