我正在尝试使用MvvmCross视图模型,在我的应用程序中,它们不仅在具有相似布局结构的不同平台之间共享,而且还在应用程序之间共享,其中信息的呈现方式取决于应用程序的外形 . 例如,iPad应用程序可能会在同一页面上显示客户列表和所选客户详细信息,而iPhone应用程序会在不同页面之间拆分它们 . MvvmCross支持所有这些场景,因此在所有这些应用程序之间共享通用视图模型集非常简单 .
然而,有时候在多个视图模型之间共享相同的细节很方便 . 例如,不同的视图可能会显示最近的Twitter消息,股票报价更新等 . 或者某些全局用户设置(用户名,最近的登录时间等) . 目前我已将它们放在从MvxNotifyPropertyChanged继承的单例类AppState中 . 所有视图模型都具有属性AppState来访问共享应用程序状态,因此任何视图都可以将其控件绑定到AppState ..这也适用于设计时模型 .
我已经在几个平台上测试过(没有尝试非Windows平台),它按预期工作 . 但我没有测试终身情景,例如墓碑/脱水 . 基本上我的视图中有一些部分绑定到单例的属性 . 是否有与视图模型生命周期相关的警告?
另外,如果使用这样的单例是可以接受的,我可以使用singleton pattern或MvvmCross依赖注入(MvxResolve) . 从技术上讲它会是一样的,所以这两种方法都有什么优势吗?
1 回答
如果静态共享适用于您和您的应用,那就太棒了 .
我没有具体的理由可以想到为什么这会使你的对象在不同的生命周期情况下更难使用 .
static
s为'frowned upon'的主要原因是架构原因 -static
导致紧密耦合的代码,这种代码不太可测试,而且(IMHO)在较长时期内难以维护和重用 .如果您的应用程序不关心这些事情 - 可能就是这种情况 - 那么静态单例可能是构建应用程序的好方法 - 甚至可能使代码更容易为其他人服务 .
关于这类领域还有很多其他问题,例如:
What are the downsides to using Dependency Injection? - 接受回答https://stackoverflow.com/a/2407614/373321
What is so bad about singletons?
Why do I need an IoC container as opposed to straightforward DI code?