代码之家  ›  专栏  ›  技术社区  ›  Erkan Haspulat

模型能观察到视图吗?

  •  3
  • Erkan Haspulat  · 技术社区  · 16 年前

    我在爪哇开发一个应用程序,在我的GUI中我有几个 JPanels 有了很多设置,这将是 视图 . 只有一个 模型 在这几个人的背景下 JPANS .通常,我会 观察 这个 模型 JPANS .

    我只是想知道,观察是否是一种好的做法 视图 来自 模型 ?因为,用户更改了 视图 这一变化必须影响我的 模型 . 还是我遗漏了一些重要的原则?谢谢你的帮助。

    3 回复  |  直到 16 年前
        1
  •  6
  •   user172632    16 年前

    我觉得你在质疑这件事太好了。

    你缺少的可以帮助你的是一个控制器。

    退房 http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller 举个例子。

    基本上,控制器是模型和视图之间的中介。它“控制”应用程序。您的视图应该知道的唯一一件事是传递给它的数据以及如何显示它。你的模型唯一应该知道的就是数据。控制器将这两者联系在一起,并包含操作数据并准备将其传递给视图的业务逻辑。

    使用这种设计所得到的是一个loosley耦合的、易于测试的应用程序。它真的很优雅。

    干杯,

    迈克

        2
  •  2
  •   Anurag    16 年前

    这将在模型和视图之间创建不必要的绑定。但也要考虑一个无限循环,你可以进入。

    如果模型也被视图以外的东西(可能是Web服务)更新了呢?然后,通过Web服务对模型进行更改将导致视图发生更改,因为视图将观察模型。而且,当模型也在观察视图时,视图中的更改也会触发模型中的更改。看到这里的递归吗?绕过它并不太困难,但会导致一个非常糟糕和无法维护的设计。

        3
  •  1
  •   Roshan    16 年前

    为了将模型和视图连接在一起,已经提出的一个解决方案是添加一个控制器,以便实现完整的模型视图控制器组件集。这将在所有三个组件之间引入一个非常紧密的耦合,从单元测试的角度来看,这并不是真正需要的。

    另一种选择是考虑 Model-View-Presenter pattern . 演示者将是模型和视图之间的中介,并将根据视图的任何输入更新模型,还将负责根据模型中的任何更改更新视图。对于单元测试,您可以用一个模拟视图来测试模型,或者用一个模拟模型来测试视图(或者两者都模拟,只测试演示者)。

    推荐文章