你能告诉我你的方式或给我一个参考MFC应用程序中的最佳对话框和属性表验证的最佳实践吗?CDialog和CPropertySheet验证最佳实践?
我有我自己的方式来做到这一点,但我对任何其他意见感兴趣。
我听说MFC DDX_xxx和DDV_xxx宏(和UpdateData()函数)不是最好的解决方案吗?
属性表验证呢?
你能告诉我你的方式或给我一个参考MFC应用程序中的最佳对话框和属性表验证的最佳实践吗?CDialog和CPropertySheet验证最佳实践?
我有我自己的方式来做到这一点,但我对任何其他意见感兴趣。
我听说MFC DDX_xxx和DDV_xxx宏(和UpdateData()函数)不是最好的解决方案吗?
属性表验证呢?
我喜欢使用Model-View-Presenter的变体。 Michael Feathers的一个很好的MFC风格的例子是“The Humble Dialog Box”。
一些原则:
保持视图(对话框或属性表中的情况下)的无知越好。它不应该包含实际的业务/验证逻辑。相反,它应该便于向用户显示数据并由用户操纵数据。它应该通知主持人事情正在发生,但它不应该在任何意义上“引导”行动。
该模型负责数据的形状。在我的模型中,每个属性都存储在一个LimitedXXX结构中。例如LimitedString
,具有CString m_value
,int m_maxLen
,int m_minLen
和AllowedChars m_allowedChars
。 AllowedChars
是一个标志枚举,表示是否允许整数数字,十进制/组字符,字母,标点符号等字符。该模型只有字段,它不包含任何逻辑。
演示者负责将视图中的模型值传入视图并响应视图中的通知。当视图引发编辑控件的更改通知时,演示者通过验证模型显示的限制进行响应。主持人可以根据该值是否有效采取各种行动。它可能会显示一个消息框并恢复原始值,它可能会将错误消息推送到视图的通知区域,这可能会在视图中显示错误图标。
组件应该通过接口而不是具体的类引用相互引用。这允许模型和演示者在没有UI的情况下进行单元测试。而且UI本身又薄又笨,大部分风险都是通过测试其他两个组件来完成的。