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