【发布时间】:2011-06-23 15:35:27
【问题描述】:
我读了http://www.codeproject.com/KB/architecture/MVC_MVP_MVVM_design.aspx,它说:
尽管 MVC 和 MVP有他们的问题。其中之一 是视图状态的持久化。 例如,如果模型是 领域对象,什么都不知道 关于 UI,而 View 没有 实现任何业务逻辑,然后 我们将在哪里存储状态 View 的元素,例如 selected 项目?福勒想出了一个解决方案 以演示模型的形式 模式。
我想知道为什么 Presenter 不能保持 View 状态?它已经包含了所有的 View 逻辑。
据我了解,在 MVC 和 MVP 中,状态保留在 View 中。在 PM 和 MVVM 中,状态保存在表示模型中。为什么 Presenter 在这种特殊情况下不能跟随 PM 并包含视图的状态?
这是另一篇文章,它说 Presenter 不保持 View 状态,而是 View 保持:http://www.codeproject.com/KB/aspnet/ArchitectureComparison.aspx
【问题讨论】:
-
它打破了模式。 WPF 的强大功能通过DataTemplates 加以利用。视图“查看”数据类型并“膨胀”到其定义的 DataTemplate。 MVP 还允许“视图优先”的方法;这使得从定义的 ViewModel 更改 View 变得更容易。示例:如果您的 ViewModel 公开 IList
客户,您可以轻松更改您的视图,而不是更改您的视图和控制器 (MVC)。 -
我不同意它不应该“存储视图元素的状态,例如所选项目”的说法。许多属性可以是模型的一部分,有助于保存视图状态,例如“IsSelected”属性,而不会破坏模式。
-
在你提到的first article的总结中,作者指出:“MVP 将更多的工作委托给 View 并移除了 Controller。它引入了 Presenter 类,封装了 View 的状态和命令。”所以文章中似乎存在矛盾。
-
@Marijn 是的,我两天前才注意到。我不知道该怎么想。你认为状态应该在 Presenter 中吗?
-
在干净的 MVP 中你不需要;我更新了我的答案,试图更清楚地反映这一点。
标签: architecture mvvm theory mvp