2009-06-22 120 views
3

你能告诉我你的方式或给我一个参考MFC应用程序中的最佳对话框和属性表验证的最佳实践吗?CDialog和CPropertySheet验证最佳实践?

我有我自己的方式来做到这一点,但我对任何其他意见感兴趣。

我听说MFC DDX_xxx和DDV_xxx宏(和UpdateData()函数)不是最好的解决方案吗?

属性表验证呢?

回答

3

我喜欢使用Model-View-Presenter的变体。 Michael Feathers的一个很好的MFC风格的例子是“The Humble Dialog Box”。

一些原则:

  • 保持视图(对话框或属性表中的情况下)的无知越好。它不应该包含实际的业务/验证逻辑。相反,它应该便于向用户显示数据并由用户操纵数据。它应该通知主持人事情正在发生,但它不应该在任何意义上“引导”行动。

  • 该模型负责数据的形状。在我的模型中,每个属性都存储在一个LimitedXXX结构中。例如LimitedString,具有CString m_value,int m_maxLen,int m_minLenAllowedChars m_allowedCharsAllowedChars是一个标志枚举,表示是否允许整数数字,十进制/组字符,字母,标点符号等字符。该模型只有字段,它不包含任何逻辑。

  • 演示者负责将视图中的模型值传入视图并响应视图中的通知。当视图引发编辑控件的更改通知时,演示者通过验证模型显示的限​​制进行响应。主持人可以根据该值是否有效采取各种行动。它可能会显示一个消息框并恢复原始值,它可能会将错误消息推送到视图的通知区域,这可能会在视图中显示错误图标。

  • 组件应该通过接口而不是具体的类引用相互引用。这允许模型和演示者在没有UI的情况下进行单元测试。而且UI本身又薄又笨,大部分风险都是通过测试其他两个组件来完成的。