中小型项目开发完全遵从MVP或MVVM是否是过度设计?
在客户端开发中,MVVM(Model-View-ViewModel)和 MVP(Model-View-Presenter)是常见的架构模式,用于解耦 UI 和业务逻辑。虽然两者在职责划分上有很多相似之处,但核心区别主要在于「是否持有 View 的引用」。
在MVP模式中:
Presenter 负责处理业务逻辑,并且需要调用View方法来更新界面。
在Android里View通常是Activity/Fragment,为了降低耦合,我通常会定义一个View接口,再由Activity/Fragment去实现。
理由有二:
- 降低对 Android 框架的直接依赖,便于单元测试。
- 避免强依赖具体实现,Presenter可以给不同页面使用
但是这样会多出很多契约接口,大大增加复杂性。
在MVVM模式中:
ViewModel 只要负责管理数据状态,不直接引用View。
由于 ViewModel 不持有 View 的引用,它天然解除了 View 的绑定问题。
但是,Android开发里很多常见的操作,比如:
- 启动Activity (startActivity(Intent))
- 启动Service
- 调用资源
我的做法是通过定义一个UIActionViewModel专门发送事件,让Activity/Fragment监听执行。其他业务ViewModel持有UIActionViewModel的引用,通过UIActionViewModel发出事件。
也是稍微复杂了点。
这些设计在协同开发的过程中经常会变形,觉得这样做多余。 比如认为没有必要做单元测试,页面简单不需要设计这么复杂等等。
最近我在想,是不是对中小型项目来说没必要搞这么复杂。只要逻辑清晰明确就好了?