静态视图模型/演示模型

时间:2010-01-09 13:40:03

标签: architecture mvp

使我的所有View Models / Presentation Models静态类是否不正确,以便如果任何其他View Presenter想要更改其自身以外的视图模型,它可以轻松获取对它的引用?

如果这是错误的方法你会如何实现它?

2 个答案:

答案 0 :(得分:1)

如果你想让它静止,你最好实现一个合适的Singleton模式。您将发现测试使用静态模型的所有类非常困难,因为您将无法使用任何依赖性反转技术。

另外,如果你只有1个类,请注意并发性 - 你需要锁定几乎所有东西。不好。

最后,您可能需要考虑使用Factory模式。可以轻松访问,但会为每个想要使用它的类创建一个新的模型对象。并发问题(大部分)已经解决了。

答案 1 :(得分:0)

静态ViewModel听起来很糟糕(我认为静态邪恶是一般原则)。这意味着您不能拥有多个ViewModel实例。我可以想到很多UI的例子,其中有几个相同View类型的实例,但静态ViewModel是不可能的。

如果您希望跨视图启用通信,发布/订阅(事件)是一个更好的选择。

请记住,当我们谈论ViewModels / Presentaion模型时,它们通常会暴露底层域对象。如果您有显示相同域对象的部分的sevaral Views,则可以在更改状态时让Domain Object引发事件,并且显示来自该Domain Object的数据的任何ViewModel都可以订阅这些事件并相应地更新其控件。