【问题标题】:MVC Controller enable disable controlsMVC 控制器启用禁用控件
【发布时间】:2011-12-21 20:31:47
【问题描述】:

在我的 C++ 应用程序中,我使用的是 MVC 模式。我有很多模型对象,以及可以从 ui 对它们执行的操作列表。但是只有满足某些条件才能执行操作:

  • 如果显示 objectB 或 objectC,我无法显示 objectA,
  • 如果未显示,则无法对 objectA 执行任何操作
  • 其他更复杂的条件

所以我想有一个类来验证特定类的对象目前是否有有效的动作:

AActionValidator
{ 
 bool CanDoX();
 bool CanDoY();        

};
BActionValidator
{
  bool CanDoZ();
};

Controllers 类将询问此 ActionValidators 是否某个操作在特定时刻可用,如果是,它们将执行该操作。

关注点 1: 但是当某些操作变得可用/不可用时,如何自动禁用/启用 ui 控件?我猜这些 ActionValidators 类在发生这种情况时也应该发出一些事件?但是我的 ui 控件应该连接到一堆不同的 ActionValidator 类的事件

关注点2: 也许最好有一个全局 ApplicationActionManager 类来发出事件,并存储有关应用程序中所有对象的有效操作的信息?但我怕它最终会变成一大类不连贯的类

关注点3: 当 ObjectA 显示时,控制器还可以将 Show 按钮设置为禁用并启用 Hide 按钮,因为这是简单的情况,但这是控制器更新控件状态的工作吗?或者我也应该将显示/隐藏状态作为事件发出?

如何做到这一点的任何见解。谢谢

【问题讨论】:

    标签: c++ model-view-controller design-patterns


    【解决方案1】:

    我不确定我是否完全理解你在这里的意思,但我会尝试提供一些以前用 MVC 框架做过类似事情的指针。

    我通常在模型中实现验证(尽管这并不是说这样做是正确的!)。您所做的任何可能改变对象有效性的操作都需要在设置对象属性后从控制器调用验证函数,然后更新视图。

    在对象级别上使用纯虚拟基类可能很有用。例如,有一个 CanDoAction() 纯虚函数,所有对象都必须实现它,然后 objectA 如果不可见则可以返回 false。然后,您可以使用模型验证功能来实现对象之间的依赖关系,这应该为您提供一种分层验证过程。

    我希望这有某种意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-21
      • 2018-02-01
      • 2015-02-11
      • 2013-06-09
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多