【问题标题】:Using MVC style, where is the best place to call my query functions?使用 MVC 风格,调用我的查询函数的最佳位置在哪里?
【发布时间】:2016-03-28 17:17:53
【问题描述】:

我想知道这里的最佳做法。

MVC(模型 - 视图 - 控制器)模式涉及分离程序的组件,这些组件对数据进行建模、操作这些模型并以某种方式(通常通过 UI)向用户显示这些结果。

获取模型数据并将其插入数据库的函数怎么样?例如,我有一个名为 GameBoard 的对象,并且我还希望能够将这个棋盘的状态插入 SQL 数据库以用于存储/历史目的。我有一个包含我所有查询功能的类。我不是在问在哪里存储查询调用本身——这些都封装在一个类中。

但是我应该在哪里调用这些函数?这种功能是否最适合将其作为 GameBoard 的一种方法?还是应该是控制器类的一部分?

【问题讨论】:

  • 我认为应该是控制器,它初始化 de GameBoard 并使用带有查询的类调用将其存储在数据库中的方法。 GameBoard 可以有一个方法来获取它的状态,当它需要在数据库中注册棋盘状态时由控制器调用。
  • @RubioRic 这也是我的想法,但是从其他人那里听到它有助于了解我是否走在正确的轨道上。谢谢!

标签: java oop design-patterns model-view-controller


【解决方案1】:

在理想世界中,执行 GameBoard 状态持久化的类应该监听游戏事件:

  1. 用户界面按钮被点击
  2. 控制器调用一些模型方法(将计数器加一)
  3. 模型更新其内部状态
  4. 模型通知所有对状态更改事件感兴趣的侦听器
  5. 控制器接收事件并更新 UI
  6. DB 组件接收事件并将 GameBoard 状态保存到数据库

当用户单击 UI 按钮以使用数据库数据更新视图时:

  1. 用户界面按钮被点击
  2. 控制器加载数据并调用模型更新方法

接下来的 3-4-5 步是一样的

【讨论】:

  • 如果用户单击 UI 按钮从数据库中获取一些数据。那你能把这个步骤吗?我想像这个用户点击按钮,控制器调用业务逻辑(业务层)。 Model 监听业务逻辑模型的变化,并在 MVC(表示层)中更新 Model
【解决方案2】:

但是我应该从哪里调用这些函数呢?

在控制器中。通常控制器依赖于模型对象的输入和输出。例如

根据您的架构,您可能会在控制器下方引入应用服务。

详情https://www.link-intersystems.com/blog/2013/07/20/the-mvc-pattern-implemented-with-java-swing/

【讨论】:

    【解决方案3】:

    以下是 MVC 的要点。

    1. 在表示(视图和控制器)之间建立强分离 和领域(模型)。
    2. 将 GUI 小部件分成一个控制器(用于对用户刺激作出反应) 和视图(用于显示模型的状态)。
    3. 控制器和视图应该(大部分)不直接通信,但 通过模型-Observer Synchronization

    我会从哪里调用这些函数?

    您应该从您的domain model(模型)调用这些函数。

    延伸阅读martin fowler

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 2012-05-27
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多