使我的所有View Models / Presentation Models静态类是否不正确,以便如果任何其他View Presenter想要更改其自身以外的视图模型,它可以轻松获取对它的引用?
如果这是错误的方法你会如何实现它?
答案 0 :(得分:1)
如果你想让它静止,你最好实现一个合适的Singleton模式。您将发现测试使用静态模型的所有类非常困难,因为您将无法使用任何依赖性反转技术。
另外,如果你只有1个类,请注意并发性 - 你需要锁定几乎所有东西。不好。
最后,您可能需要考虑使用Factory模式。可以轻松访问,但会为每个想要使用它的类创建一个新的模型对象。并发问题(大部分)已经解决了。
答案 1 :(得分:0)
静态ViewModel听起来很糟糕(我认为静态邪恶是一般原则)。这意味着您不能拥有多个ViewModel实例。我可以想到很多UI的例子,其中有几个相同View类型的实例,但静态ViewModel是不可能的。
如果您希望跨视图启用通信,发布/订阅(事件)是一个更好的选择。
请记住,当我们谈论ViewModels / Presentaion模型时,它们通常会暴露底层域对象。如果您有显示相同域对象的部分的sevaral Views,则可以在更改状态时让Domain Object引发事件,并且显示来自该Domain Object的数据的任何ViewModel都可以订阅这些事件并相应地更新其控件。