1

我正在试验 MvvmCross 视图模型,在我的应用程序中,它们不仅在具有相似布局结构的不同平台之间共享,而且在根据应用程序的外形尺寸以不同方式呈现信息的应用程序之间共享。例如,iPad 应用程序可能会在同一页面上显示客户列表和选定的客户详细信息,而 iPhone 应用程序会将它们拆分到不同的页面中。MvvmCross 支持所有此类场景,因此在所有这些应用程序之间共享公共视图模型集非常简单。

然而,在某些情况下,在多个视图模型之间共享相同的细节很方便。例如,不同的视图可能会显示最近的 twitter 消息、股票报价更新等。或者一些全局用户设置(用户名、最近的登录时间等)。我暂时将它们放在从 MvxNotifyPropertyChanged 继承的单例类 AppState 中。所有视图模型都有属性 AppState 来访问共享的应用程序状态,因此任何视图都可以将其控件绑定到 AppState.. 这也适用于设计时模型。

我已经在几个平台上进行了测试(还没有尝试过非 Windows 平台),它按预期工作。但我没有测试生命周期场景,例如墓碑/脱水。基本上,我的视图中有一些部分绑定到单例的属性。是否有与视图模型生命周期相关的警告?

此外,如果可以接受使用此类单例,我可以使用单例模式或 MvvmCross 依赖注入 (MvxResolve)。从技术上讲,它是相同的,那么这两种方法有什么优势吗?

4

1 回答 1

1

如果静态共享对您和您的应用程序有效,那就太好了。

没有具体的原因我能想到为什么这会使您的对象更难在不同的生命周期情况下使用。

statics 被“皱眉”的主要原因是架构原因 - sstatic导致紧密耦合的代码难以测试,并且(恕我直言)更难以长期维护和重用。

如果您的应用程序不关心这些事情(可能是这种情况),那么静态单例可能是构建您的应用程序的好方法 - 甚至可以使其他人更容易理解代码。

关于此类区域还有很多其他问题,例如:

于 2013-10-28T09:48:16.287 回答