2

我在理解和实现 MVC 模式时遇到了一些麻烦。

我有一个单例“模型”类,它包含应用程序的所有数据并扩展了 Observable。当这些数据被修改时,我想更新视图,当其中一个视图收到用户的一些输入时,我想更新模型。中间是一个控制器(实现观察者),它具有视图和模型的实例。

我认为要做到这一点,视图必须有一个控制器实例。每当它从按钮或任何组件接收到事件时,它都会调用正确的控制器方法,将信息传输到模型。模型被更新并通知观察者,观察者将更新所有视图的每个组件,即使它们没有链接到已修改的特定数据,因为控制器无法知道模型中已修改的内容。我不确定这是一个好的设计。

我看了一下 PropertyChangeListener 类,它似乎纠正了这个问题,但我不太确定我是否理解所有内容。有没有首选的方法来做到这一点?

提前致谢 !

4

1 回答 1

2

您的建议存在一些问题。

首先,您描述的是MVVM,而不是MVC

第二个问题是这些术语model并不controller用来描述单例。它们只是通过将逻辑组织成具有明确职责的类来帮助您分离关注点的术语。

MVC结构如下:

该模型

这是您的应用程序逻辑/业务规则。这基本上意味着,如果您的应用程序是关于电话簿的,那么与提供电话簿 API 有关的所有逻辑和数据结构都在这里实现。

风景

该层与模型完全分离,因为它不关心数据结构或逻辑,而只关心呈现简单的值。字符串、整数、集合,应有尽有。但它不关心模型的 API,它只依赖于控制器的。

控制器

这是事情走到一起的地方。控制器是中介。它使用模型的语言和视图的语言,它可以让它们一起工作。用户请求被路由到控制器。例如,一个请求可能想要列出电话簿中的所有号码。会发生什么:

  1. 控制器接收请求
  2. 通过模型的 API 向模型询问电话簿中存在的所有号码
  3. [可选] 将数据转换为视图要显示的数据结构
  4. 将数据传递给视图

结束前的最后一句话:

如果控制器没有将模型中的数据转换为简单的东西,那么据称视图现在与模型紧密耦合。但是,情况并非总是如此。即使模型的 API 发生变化,控制器可能仍然能够将新 API 适配到视图已经理解的旧 API。

于 2012-10-22T10:35:38.143 回答