我想要一个保存按钮,只有在视图isdirty时才启用。我应该如何处理这个问题?如何使用Model-View-Presenter模式实现IsDirty的UI?
我的特殊情况是使用.Net 2.0的WinForms应用程序。我有一个主讲人呼叫的服务层。服务层返回一个屏幕绑定的DTO。
将视图绑定到此DTO并让DTO实现isDirty属性可以吗?或者我应该将DTO中的数据卸载到专门用于演示目的的另一个对象中,例如视图模型?
我想要一个保存按钮,只有在视图isdirty时才启用。我应该如何处理这个问题?如何使用Model-View-Presenter模式实现IsDirty的UI?
我的特殊情况是使用.Net 2.0的WinForms应用程序。我有一个主讲人呼叫的服务层。服务层返回一个屏幕绑定的DTO。
将视图绑定到此DTO并让DTO实现isDirty属性可以吗?或者我应该将DTO中的数据卸载到专门用于演示目的的另一个对象中,例如视图模型?
视图不应该很脏。只有你的模型。
然后你可以简单地有一个事件,当你的模型变脏时触发,当它变得干净时触发一个事件。
这是我最初的想法。该模型是什么会变得肮脏,并认为可以反映这一事实。所以我会假设模型必须实现一个isdirty属性。 – David 2009-12-30 21:09:40
那么你可以让你的所有控件都在自动调用_presenter.MarkDirty()或类似的方法时启用更改。
或者你可以允许使用保存按钮,但是如果对象是干净的,然后用没有更改的对话框或类似的响应进行响应。
自动加载返回可能不是WinForms中最正确的词,但它应该至少表达我的观点。 – 2009-12-30 22:31:50
我同意@Pace只有模型应该脏。
我只是想在这里添加(因为这似乎是.net),您可以使用CSLA来实现您的模型,并且您可以免费获得IsDirty funcionality(以及许多其他的东西)。
更新:
是里昂证券不看好的业务层?
的确的,但我认为IsDirty方法属于业务层。你说的是在你的DTO上实现一个IsDirty,但是当你这么做的时候,这个对象不再是一个DTO(因为它不仅仅是传输数据)。
此外,您可以使用CSLA作为您的DTO和表示层之间的中间层,但如果您的意图只是使用IsDirty功能,则这会有点太多开销。重点是:当你开始在你的DTO中加入'功能'的时候,我不明白你为什么不公开你的业务层中的CSLA对象而不是简单的DTO。
这是我做的,视图本身可以跟踪用户是否试图修改数据。发生这种情况时,可以通知演示者视图数据已更改,演示者可以对此事件进行操作以启用/禁用保存按钮。这是迄今为止我发现的最简单的解决方案,否则您必须对DTO/Data对象本身进行更改跟踪。
“MVP”非常广泛...什么平台/语言/体系结构? – 2009-12-30 20:32:31
@Marc希望这提供了更多的细节,让你给予一些回应 – David 2009-12-30 21:13:25