首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在MVVM中构建ViewModel而不违反单一责任原则?

在MVVM架构中,构建ViewModel时需要遵循单一责任原则,以实现良好的代码结构和可维护性。以下是一些建议:

  1. 分离关注点:将ViewModel划分为多个小的、独立的组件,每个组件负责一个特定的功能。这样可以避免将不相关的代码放在一个大的ViewModel中。
  2. 使用组合而非继承:将多个小的ViewModel组合成一个大的ViewModel,而不是使用继承。这样可以避免层次过深的继承结构,并保持每个ViewModel的简洁性。
  3. 遵循Interface Segregation Principle(接口隔离原则):将ViewModel的接口设计得更精简,只包含所需的方法和属性。这样可以避免将不必要的方法和属性暴露给其他组件。
  4. 使用依赖注入:通过依赖注入,将各个ViewModel之间的依赖关系解耦,使得每个ViewModel都能独立工作。这样可以提高代码的可测试性和可维护性。
  5. 遵循SOLID原则:尤其是遵循Single Responsibility Principle(单一责任原则),确保每个ViewModel只负责一个特定的任务。
  6. 代码重用:将通用的功能抽象成可重用的组件,以减少重复代码。这样可以提高代码的可维护性和可扩展性。
  7. 良好的命名规范:为ViewModel和其属性、方法使用有意义的命名,以提高代码的可读性和可维护性。

通过遵循以上建议,可以在MVVM架构中构建ViewModel,同时遵循单一责任原则。这将有助于实现更高质量、更易于维护的代码。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

“终于懂了“系列:Jetpack AAC完整解析(四)MVVM - Android架构探索!

MVC 所以,MVC 的问题点 如下: Activity/Fragment 责任不明,同时负责View、Controller,就会导致其中代码量大,不满足单一职责。...MVP 本质是面向接口编程,实现了依赖倒置原则。MVP解决了View层责任不明的问题,但并没有解决代码耦合的问题,View和Presenter之间相互持有。...MVVM 的本质是 数据驱动,把解耦做的更彻底,viewModel持有view 。...这样会使 UserListViewModel 类承担太多的责任,这就违背了单一职责原则ViewModel 会将数据获取过程委派给一个新的模块,即Repository。...ViewModel 不能持有 View层引用,包括Context也不能持有。 将一个数据源指定为单一可信来源。每当需要访问数据时,都应一律源于此单一可信来源。

1.9K10

响应式架构最佳实践——MVI

❝如果你已经知道架构模式的基本原则,以及MVVM和MVI模式的细节,那么跳过基础知识,跳到文章的MVI+LiveData+ViewModel(或第二部分)。...这一原则与面向对象编程的单一责任原则密切相关,该原则指出:"每个模块、类或函数都应该对软件所提供的功能的单一部分负责,而且该责任应该完全由类、模块或函数封装。"...⭐ MVVM Architecture: 在Model-View-ViewModel架构,视图拥有ViewModel的实例,它根据用户的输入/动作调用相应的函数。...总之,MVVM架构最好的部分是ViewModel,但我认为它没有遵循MVC模式定义的Model概念,因为在MVVM,DAO(数据访问对象)的抽象被认为是Model,视图观察来自ViewModel的多个可观察属性的状态变化...如果没有,这个架构的核心思想是,我们在MVVM架构包括一个实际的不可变的Model层,我们的视图依赖于这个Model的状态变化。这样一来,ViewModel就必须修改和公开这个单一的Model。

1.6K20

关于Android架构,你是否还在生搬硬套?

知识储备:需掌握Java面向对象、六大设计原则,如果不理解也无妨,我尽量将用到的设计原则加以详细描述 目录 1. 模块化的意义何在?...数据与视图是两个不同的概念,为了提高复用性以及可维护性,我们应当根据单一设计原则我们应当将二者进行分层处理,所以无论是MVC、MVP还是MVVM最核心的点都是将数据与视图进行分层。...在当前的Android可以使用DataBinding实现同样的效果,以Jetpack MVVM为例:ViewModel从Repository拿到数据暂存到ViewModel对应的ObservableFiled...(这也要求ViewModel,Repository的函数要符合单一原则)。...面临的问题很明显,修改刷新或加载更多都会对对方产生影响,违反开闭原则的闭(对修改关闭:行为没变不准修改源代码),导致存在不可预期的问题产生。

81110

今日头条:iOS 架构设计杂谈

阅读字数:2842 | 8分钟阅读 摘要 本次分享将探讨iOS的架构设计,讲解工程设计的6大原则,通过一个简单登陆界面,一步步分析开发MVVM框架应用。...单一功能原则,不要考虑在模块内实现与它不相关的功能,比如在一个类既要处理string MD5又要处理图片的解压缩,这就是明显的违反单一功能原则的例子。再往细说,其实在方法内也不应该处理过多的事情。...MVVM案例 iOS MVVM实现方案 MVVM中最令我兴奋的是有ViewModel这个角色,因为ViewModel比苹果的MVC设计的Controller更小,同时又能处理业务逻辑,当业务逻辑拆分的足够小和分散的时候...ViewModel其实是View的数据层的影子,它的神奇之处在于这个影子是可以被改变然后映射到实体上。这个过程ViewModel抽象出UI的数据,然后将这些与UI上的属性进行绑定。...经过MVVM的设计ViewModel和Model已经与App的UI解耦,可以很轻松的将ViewModel往上提一个层次让整个公司去使用,这时整个架构就会多出一个公司通用业务层。

1.7K30

「Android 架构」—— MVVM 详解

Model-View-ViewModel 的意义 关注点分离原则是架构的终极原则,并且每个设计模式都在尽其所能的实现这一点。...Repository 也是 ViewModel单一真实数据来源。...MVVM 组件的连接性 View 不仅观察 ViewModel 的数据,而且 ViewModel 还观察 Repository 的数据,后者又观察来自本地数据库和远程数据源的数据。...为了全面考虑这一点,你可以通过以下方式考虑 Model,View,ViewModel,Repository 和其他类之间的联系。 遍历层次结构时,上层类直接引用其子级。另一方面,子级持有其父级引用。...你今后读代码的时间永远大于写代码,所以代码的可读性要放在第一位,不要懒得去抽离和构建代码,以后的你会感谢当初的自己的。 总结 在这篇文章,你了解了MVVM架构模式背后的概念。

1.8K40

MVVM 面向接口型框架封装和单元测试

MVVM ViewModel 层是 View 和 Model 的中转层,View 专门用来处理 UI 的操作,Model 是一些数据实体,ViewModel 操作一些和数据处理相关的绑定操作,因为...databinding 的`双向绑定`特性,最好的封装应该是让 View 层只有绑定 ViewModel 和一些必要的 UI 操作,整体的逻辑和思路干净整齐,ViewModel 是一个个功能单一方法的集合...「单一原则」是我们写代码的时候一定要养成的好习惯,它不仅能帮助我们写出更优雅的代码,也是代码具有可测性、逻辑性和可维护性的要求。 MVVM 单元测试很方便,因为有了双向绑定。...我们写代码的时候,就应该保持好设计性,尽量做到让代码的可测性很强,保持单一原则,隔离好 View 和 Model 的逻辑,让代码通过验证方法不需要真正构造 Activity 实例就能有足够的可测性。...为了让代码保持可测行,要求我们代码需要具有设计性,代码的设计性和单一原则又是单元测试的一个本身要求,两者相互影响,相互驱动。 这就是测试驱动开发。

2K60

iOS架构设计:揭秘MVC, MVP, MVVM以及VIPER

因此,克服复杂性的最简单方法是按照单一职责原则在多个实体之间划分职责。 为什么要可测试 对于那些已经习惯了单元测试的人来说,这通常不是问题,因为在添加了新的特性或者要增加一些类的复杂性之后通常会失败。...所以MVC准则被违反了,但是这种情况总是发生,通常人们不会觉得它是错误的。...在MVP,UIViewController的子类实际上是Views不是Presenters。...尽管通过简单的绑定来使用MVVM是可实现的,但是ReactiveCocoa(或其变体)却能更好的发挥MVVM的特点。 函数响应式框架有一个残酷的事实:强大的能力来自于巨大的责任。...,但是事实上,MVVM的View要比MVP的View承担的责任多。

1.2K20

MVC VS MVVMM

Controller 是 view 与 model 交互的桥梁,担负着入口的责任。...MVVM 模式 MVVM 模式是 Model-View-ViewModel 的简写。这里没有写 Controller,但这个模式里却是有 Controller 的。...为什么多了 ViewModel 这么一层呢?在原生应用开发上,也是有数据库的。从服务器传来的数据,需要先将其存放到本地,然后再展现到页面上。这里就涉及到了一个 view 与 model 的对应问题。...在 SRP 原则下,ViewController 实际上只有连接这么一个职责,因此我们需要将这一业务逻辑的转换职责放到单独的类来承担,也就是 ViewModel。 总结 模式都是原则的体现。...MVC 模式和 MVVM 模式虽然叫法不一样,但实际上都是单一职责原则的变种。

47450

引入Jetpack架构后,你的App会发生哪些变化?

,其实这二者根本没有在同一个层次,MVVM ViewModelMVVM架构的一个角色,看不见摸不着只是一种思想。...Jetpack ViewModel是一个实实在在的框架用于做状态托管,有对应的作用域可跟随Activity/Fragment生命周期,但这种特性恰好可以充当MVVM ViewModel的角色,分隔数据层和视图层并做数据托管...保证丢失,二者搭配简直是天作之合。...并不是我同意xml写业务逻辑这一观点,我觉得碰到问题就得去解决问题,如果解决问题的路上有障碍就尽量扫清障碍,不是一味的逃避。 {vm.isShow ?...什么是MVVM MVVM其实是前端领域一个专注于界面开发的架构模式,总共分为View、ViewModel、Repository三个模块 (需严格按照单一设计原则划分) View(视图层): 专门做视图渲染以及

99131

MVVM 进阶版:MVI 架构了解一下~

前言 -- Android开发发展到今天已经相当成熟了,各种架构大家也都耳熟能详,MVC,MVP,MVVM等,其中MVVM更是被官方推荐,成为Android开发的显学。...不过软件开发没有银弹,MVVM架构也不是尽善尽美的,在使用过程也会有一些不太方便之处,MVI可以很好的解决一部分MVVM的痛点。...所以在androidmvc更像是这种形式: [1240] 因此MVC架构在android平台上的主要存在以下问题: Activity同时负责View与Controller层的工作,违背了单一职责原则...,这其实是单一数据源不是双向数据绑定,所以其实MVVM的这一大特性我其实并没有用到 View通过调用ViewModel提供的方法来与ViewMdoel交互 小结 MVC架构的主要问题在于Activity...MVVM的双向数据绑定主要通过DataBinding实现,但有很多人(比如我)不喜欢用DataBinding,而是View通过LiveData等观察ViewModle的数据变化并自我更新,这其实是单一数据源不是双向数据绑定

1.8K20

引入Jetpack架构后,你的App会发生哪些变化?

相提并论,其实这二者根本没有在同一个层次,MVVM ViewModelMVVM架构的一个角色,看不见摸不着只是一种思想。...Jetpack ViewModel是一个实实在在的框架用于做状态托管,有对应的作用域可跟随Activity/Fragment生命周期,但这种特性恰好可以充当MVVM ViewModel的角色,分隔数据层和视图层并做数据托管...并不是我同意xml写业务逻辑这一观点,我觉得碰到问题就得去解决问题,如果解决问题的路上有障碍就尽量扫清障碍,不是一味的逃避。 {vm.isShow ?...5.1 什么是MVVM MVVM其实是前端领域一个专注于界面开发的架构模式,总共分为View、ViewModel、Repository三个模块 (需严格按照单一设计原则划分) View(视图层): 专门做视图渲染以及...双向绑定通常用在可交互式的View,比如EditText内容会通过用户输入改变的,此时需要通过双向绑定才能保证数据、UI一致。

1.9K80

无处安放的业务逻辑使你在Android架构上吃了多少生硬的亏,是否还在生搬硬套?

知识储备:需掌握Java面向对象、六大设计原则,如果不理解也无妨,我尽量将用到的设计原则加以详细描述 目录 1. 模块化的意义何在?...数据与视图是两个不同的概念,为了提高复用性以及可维护性,我们应当根据单一设计原则我们应当将二者进行分层处理,所以无论是MVC、MVP还是MVVM最核心的点都是将数据与视图进行分层。...在当前的Android可以使用DataBinding实现同样的效果,以Jetpack MVVM为例:ViewModel从Repository拿到数据暂存到ViewModel对应的ObservableFiled...(这也要求ViewModel,Repository的函数要符合单一原则)。...面临的问题很明显,修改刷新或加载更多都会对对方产生影响,违反开闭原则的闭(对修改关闭:行为没变不准修改源代码),导致存在不可预期的问题产生。

1.6K00

引入Jetpack架构后,你的App会发生哪些变化?

相提并论,其实这二者根本没有在同一个层次,MVVM ViewModelMVVM架构的一个角色,看不见摸不着只是一种思想。...Jetpack ViewModel是一个实实在在的框架用于做状态托管,有对应的作用域可跟随Activity/Fragment生命周期,但这种特性恰好可以充当MVVM ViewModel的角色,分隔数据层和视图层并做数据托管...并不是我同意xml写业务逻辑这一观点,我觉得碰到问题就得去解决问题,如果解决问题的路上有障碍就尽量扫清障碍,不是一味的逃避。 {vm.isShow ?...5.1 什么是MVVM MVVM其实是前端领域一个专注于界面开发的架构模式,总共分为View、ViewModel、Repository三个模块 (需严格按照单一设计原则划分) View(视图层): 专门做视图渲染以及...双向绑定通常用在可交互式的View,比如EditText内容会通过用户输入改变的,此时需要通过双向绑定才能保证数据、UI一致。

81000

MVVM 成为历史,Google 全面倒向 MVI

这样一来,UI便可专注于发挥单一作用:读取UI State并相应地更新其UI元素。因此,切勿直接在UI修改UI State。违反这个原则会导致同一条信息有多个可信来源,从而导致数据不一致的问题。...UI State集中管理的优缺点 在MVVM我们通常是多个数据流,即一个State对应一个LiveData,MVI则是单个数据流。两者各有什么优缺点?...界面层则从MVVM架构变成了MVI架构,强调了数据的单向数据流动与状态的集中管理。...便可获取页面的所有状态,相对 MVVM 减少了不少模板代码 添加状态只需要添加一个属性,降低了ViewModel与View层的通信成本,将业务逻辑集中在ViewModel,View层只需要订阅状态然后刷新即可...当然在软件开发没有最好的架构,只有最合适的架构,各位可根据情况选用适合项目的架构,实际上在我看来Google在指南中推荐使用MVI不再是MVVM,很可能是为了统一Android与Compose的架构

1.7K10

如何构建Android MVVM应用程序

MVVM模式ViewModel和View是用绑定关系来实现的,所以有了DataBinding 使我们构建Android MVVM 应用程序成为可能。   ...更是很少有博文来告诉你在Android 如何通过Data Binding 去构建MVVM 的应用框架。这也就是是本篇文章的重点。...低耦合度 MVVM模式,数据是独立于UI的,ViewModel只负责处理和提供数据,UI想怎么处理数据都由UI自己决定,ViewModel 涉及任何和UI相关的事也持有UI控件的引用,即使控件改变...3、如何构建MVVM应用程序 1. 如何分工 构建MVVM框架首先要具体了解各个模块的分工,接下来我们来讲解View,ViewModel,Model 的它们各自的职责所在。...4、总结和源码### 本篇博文讲解主要是一些个人开发过程总结的Android MVVM构建思想,更多是理论上各个模块如何分工,代码如何设计,虽然现在业界使用Android MVVM模式开发还比较少,但是随着

1.2K10

现代软件开发:架构模式、编程范式、设计模式及云原生方法论

**面向函数编程(FP)**则是受到数学函数概念启发的范式,它强调无副作用的纯函数和数据不可变性。FP的核心原则函数的一等公民、高阶函数等,在现代开发中越来越受到重视。...软件架构模式:构建应用的蓝图随着软件系统变得越来越复杂,单一的编程范式已无法满足需求。这时,软件架构模式的概念应运而生。...术语说明软件架构模式为了解决软件工程的重复出现的问题形成的一套经典解决方案,以下是对MVC、MVP和MVVM三种设计模式的浅析,MVC (Model-View-Controller)历史发展: MVC...MVVM (Model-View-ViewModel)历史发展: MVVM首次由Microsoft在2005年引入,用于绑定图形用户界面的.NET框架WPF。...遵循这些原则有助于开发者构建出适应性强、可扩展、可维护,并且与底层硬件解耦的云应用程序。云原生的应用通常更加灵活,能够在现代的云计算环境充分发挥其优势。

49210

MVC、MVP、MVVM 架构的特点与区别

MVVM MVVM定义    再来是 MVVMMVVM 的架构一样是 M、V 分离,但中间是以 VM (ViewModel) 来串接,这个 ViewModel 比较像是 View 的一个代理程序,它负责直接对...也就是说只需要将数据和视图绑定一次之后,那么之后当数据发生改变时就会自动的在UI上刷新不需要我们自己进行手动刷新。在MVVM,他尽可能的会简化数据流的走向,使其变得更加简洁明了。...可测试,界面向来是比较难于测试的,现在测试可以针对ViewModel来写。...View 非常薄,部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性, Presenter非常厚,所有逻辑都部署在那里。...所以,MVVM应运而生。 ViewModel: 比起MVPView需要自己提供API,MVVM在VM构建一组状态数据(state data),作为View状态的抽象。

25210

MVC、MVP、MVVM 架构的特点与区别

MVVM MVVM定义    再来是 MVVMMVVM 的架构一样是 M、V 分离,但中间是以 VM (ViewModel) 来串接,这个 ViewModel 比较像是 View 的一个代理程序,它负责直接对...也就是说只需要将数据和视图绑定一次之后,那么之后当数据发生改变时就会自动的在UI上刷新不需要我们自己进行手动刷新。在MVVM,他尽可能的会简化数据流的走向,使其变得更加简洁明了。...可测试,界面向来是比较难于测试的,现在测试可以针对ViewModel来写。...View 非常薄,部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性, Presenter非常厚,所有逻辑都部署在那里。...所以,MVVM应运而生。 ViewModel: 比起MVPView需要自己提供API,MVVM在VM构建一组状态数据(state data),作为View状态的抽象。

27810

架构设计基础知识整理

基础原则 尽量少的重复代码,低耦合(尽量小的影响),高内聚 模块,可小到一个类,大到一个系统 模块间耦合因素 构建架构时,需要谨慎耦合的因素 模块间调用 模块间传递的数据量 模块间控制 模块间接口复杂度...模块间耦合从弱到强顺序 构建架构或简单的类时,需要根据实际情况尽量契合弱的模块间耦合关系 做到职责分明,简单轻量,尽量少的潜在性的数据流动,尽量少的相互影响,避免牵一发动全身 非直接耦合: 相互之间没有直接关系...MVPPresenter从View获取数据,刷新Model,当Model的数据发生改变后,Presenter读取Model并刷新View。 2. MVVM ? ?...在Android可以通过DataBinding,直接在Layout文件绑定其ViewModel。...View: 布局 ViewModel: 负责显示数据(监听到Model的数据变化进行显示),以及处理用户交互(监听View布局的用户Action) Model: 存储内容 3. MVVM-C ?

61920
领券