在关于SO的其他与MVP相关的问题中,人们谈论Presenter保持状态信息(可以是会话状态或UI状态)。我想知道的是,因为状态基本上是“瞬态数据”,而模型的目的是封装数据访问,不能将状态保存在模型中?在Presenter和Model中存储状态是否有任何经验法则或优点/缺点? MVP模式是否要求使用Presenter?
答案 0 :(得分:4)
如果状态直接与视图绑定,那么Presenter就是合适的位置。
如果没有,模型可能是合适的位置,但在某些情况下,Presenter可能是合适的。
它们的关键在于View和Presenter在概念上耦合在一起 - 而Presenter可能不知道特定的View,通常它必须为它正在服务的View公开特定的数据。
答案 1 :(得分:4)
模型的目的不是封装数据访问,而是提供域的表示(模型),无论可能是什么。有时,数据访问作为模型的一部分包含在内(例如,使用Active Record样式数据访问),但通常情况下它是独立的。例如,当我在桌面应用程序中完成MVP时,演示者直接从数据库或使用repository检索模型 - 该模型与数据访问无关。
存储与视图相关的状态虽然有点灰色,但取决于您使用的应用程序类型 - 对于桌面应用程序而言,它更容易,因为您可以将它保留在演示者中,对于Web应用程序事情变得有点棘手。您可以考虑为视图使用单独的模型,该模型可能包含或不包装核心模型(如在MVVM模式中的ViewModel,在.Net WPF开发中很流行)。