MVC、MVP、MVVM架构设计的方式,在Android中广泛被使用。从本质上我认为,MVC和MVP其实将View层的代码解耦到Controller/Presenter中。随着业务的复杂,C/P中代码积累的多了,然后又开始解耦一些Model或Interactor或其他。随着业务再度复杂,每一个层的业务都很多代码了, 然后各种分层设计就出来了等等…
那回归到最简单的MVC、MVP模式来,我们可以发现这2个设计模式都产生了一个问题。
Controller和Presenter都需要持有View。View被各种传递。
能不能有一种方式能够同时解决解耦和值传递的问题?
由此我在实际项目中尝试 一种新的架构方式如下:
Widget:显示UI的页面级Widget,StatelessWidget或StatefulWidget。
ExtensionWidgetUI:Widget的扩展。这种专门存放了各种返回Widget的函数。
ExtensionWidgetController:业务的Controller,它也是一份Widget的扩展。但可以理解为处理业务的Controller。
ViewModel:这里我结合了Provider来使用。专门配合Controller使用,提供UI数据的支持。每一个ViewModel都mixin了一个LoadData。
LoadData:大部分情况下,页面都需要加载中、加载完成、加载失败等状态。所以这里维持了一份页面数据的加载状态,以提供给Controller、Widget访问。
如文件相关页面的代码: