我已经开始研究用于Android应用程序的MVVM架构.我怀疑是否将上下文传递给视图模型是正确的?如果没有,那么我的视图模型如何在需要时可以访问上下文.
我正在做以下事情:
由于共享首选项需要上下文来实例化对象.
我是这个架构的新手,任何指导对我都有帮助,提前谢谢.
我认为使用ApplicationContext是可以的,您可以AndroidViewModel在需要引用上下文使用getApplication()方法时扩展ViewModel .
更好的是,如果您使用匕首,根本不需要它,您只需将ApplicationContext注入您需要的地方.它可以在您的视图模型或处理共享首选项等的实用程序类中.
更新2019
我不想用我的旧帖子误导任何人,所以我认为最好对其进行更新。
通过最新版本的体系结构组件和JetPack,MVVM成为了真正合理的结构的真正竞争者,该结构以非常干净的方式拆分代码库。
视图是Activity或Fragment以及基本上被夸大的xml(我知道这有点奇怪MVVM,但让我们一起介绍一下)。
ViewModel是生命周期范围和观察者现在提供的实际ViewModel类。由于这些新功能和生命周期管理工具,ViewModel非常适合维护视图数据,同时访问Room DB或Retro API的存储库层以获取适当的LiveData,Observable Data或仅标准模型。
我将其保留在此处,因为我认为在早期的架构实施日之前这是非常相关的,但是如果您不使用Architecture Components和JetPack,Boy会漏掉大声笑。代码变得越来越简洁。:)
旧回复
这是Android社区之间长期辩论的讨论。当我们提到MVC时,很明显,模型(aka数据保存对象)是M,Activity类的Controllers = C(在iOS中,它们实际上称为UIViewControllers),而Android中View的V是XML文件本身。现在有人会争论什么代表什么的架构崩溃。但是,让我们超越这一点,讨论MVVM。
MVVM已经存在了很多年。过去,曾有几次尝试通过3rd party绑定工具将其引入Android的系统,但最终它变得更加笨拙,不值得。
最近,随着本机数据绑定的发布,Android终于能够对MVVM进行一些简洁的实现。因此,这里有几个选项。你可以做
M =模型(数据保存对象)
V =视图(代表UI的XML文件本身)
VM =这是辩论发生的地方。
有人说要成为“真正的” ViewModel,必须与Presentation层真正分离,并且Activity类本身具有生命周期回调,因此使其不值得被称为ViewModel。
其他人会指出,为了处理从ViewModel触发的大多数动作,必须了解onActivityResult,onNewIntent,onBroadcastReceived,onPause或其他生命周期处理,以适当地管理用户体验。因此,在我的团队中,我们将活动视为ViewModel。否则,您会将活动传递给一个视图模型,并且无论如何都将两者紧密结合在一起,这将使代码陷入巨大的可怕维护噩梦。
因此,如果您需要我的意见,请坚持将Activity视为ViewModel。就像将WPF中的其他其他绑定技术(如INotifyPropertyChanged)一样,将您的数据获取到ViewModel。您可以通过绑定来完成。
为了做到这一点,我做了两件事。我在XML布局中有一个Activity变量,用于将onSet注入到绑定设置中,该设置为XML提供了对viewModel或活动中任何可观察属性的直接绑定权限。然后,我还要注入需要使用的任何变量,例如,您可能有一个WeatherModel填充一个存在于Activity中的预测,您也可以在onCreate中设置它,以允许XML对其ViewModel(又称为Activity)进行访问这是viewModel的对象。
另一种选择是制作一个ViewModel对象,并将其注入到您的Activity的onCreate中的XML中,然后继续从该活动到该ViewModel来回调用以处理动作和生命周期,并随时管理该噩梦哈哈,我用这种方式完成了整个项目,在结束时,我全部重做,以避免所有重复的编码工作和来回的麻烦。
祝您好运,希望对您有所帮助。
| 归档时间: |
|
| 查看次数: |
7614 次 |
| 最近记录: |