项目结束之后的一些总结与沉淀。
- flutter
- getx
框架层
网络层
- ApiController:基类接口控制器,将网络接口绑定到GetXController的生命周期上,接口所需要用到的参数会全部放入allParams 字典中。泛型为T。
- PageController: 分页接口控制器,封装分页业务。泛型为List
。 - ListController:有限列表接口控制器,泛型为List
。 - MtController:针对接口返回类型T进行再次转换成为M的控制器。
- ResponseMixin: 封装接口统一解析,错误处理。
ViewModel关系图
- 页面的命名以Page结尾,视图的命名以View结尾,网络接口控制器的命名以Controller结尾,布局的命名以Layout结尾。
- 网络接口类型命名:分页命名pagi,有限列表命名list,操作类命名curd
- 网络接口控制器(Controller)与视图(View)是一对一的关系。如果视图是多个样式,可以在视图内定义【type】类型区分。比如登陆:LoginController <—> LoginView
- 页面(Page)与视图(View)是一对一或一对多的关系。例如:HomePage里有3个View,HomeView、ExpolreVIew、UserView。
- 视图(View)可以看成是普通的Widget,所以视图中可以包含其它视图(View)
下面为登录页面的图解。
模板化代码
工具
- 开发文档,这里是excel格式,用来输出app功能,保证视图跟网络请求一对一关系。比如登陆:user/login
- 网络请求文档 json 格式,后端网络使用的 swagger,所以这里很轻松拿到接口数据
- 各种解析脚本,这里是excel2json.py、swagger2dart.py、其它模板性文件生成脚本等
- openapigenerator: 根据 swagger 配置文件生成dart客户端代码
- vscode 插件,根据框架层,编写插件,快捷生成模板代码
其它
- 规范后端接口返回
- 规范UI设计
优缺点分析
优点
- 业务分层,更便于维护、测试
- 自动化生成重复性代码,只需要把精力关注在具体业务上
缺点
- 设计把接口数据分层展示时,传递数据不便
- 相同功能,相同界面,后台多个接口,无法满足需求
解决方案
- 暂时打破Controller与View是一对一的关系,改成多对多的关系,或Page绑定最先显示View的Controller,实现Page层的数据更新
- 通过泛型的方式将Controller绑定到View上,不传泛型,则绑定同名Controller
- 将View的render方法暴露给其它组件,不调用render方法,则使用内置View
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 chgocn@gmail.com