MVC控制器启用禁用控件

时间:2011-12-21 20:31:47

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

在我的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按钮设置为disabled并启用Hide按钮,因为这是一个简单的情况,但这是控制器更新控制状态的工作吗?或者我也应该将show / hidden状态作为事件发出?

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

1 个答案:

答案 0 :(得分:0)

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

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

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

我希望这有点道理。