Flutter 项目实战 架构模式四

本文介绍了Flutter项目中常见的MVC和MVP架构模式,详细阐述了各自的组成部分和工作原理。在Flutter中,StatefulWidget可以视为MVC模式的Controller,而MVP模式中,StatefulWidget作为视图层,Presenter处理业务逻辑。通过实例展示了如何在Flutter中实现这两种架构模式,包括创建BaseModel、BasePresenter和BaseViewState。作者强调了软件架构决策的重要性,并分享了个人的学习与职业发展建议。
摘要由CSDN通过智能技术生成

维基百科软件架构

有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。软件架构会包括软件组件、组件之间的关系,组件特性以及组件间关系的特性。软件架构可以和建筑物的架构相比拟。软件架构是构建计算机软件,开发系统以及计划进行的基础,可以列出开发团队需要完成的任务。

软件架构是在软件的基础架构上进行决策,一但决定后,再修改的代价很大。软件架构中的决策包括在软件设计时的一些特殊结构性选项,例如要控制太空船登陆艇的系统需要快速而且可靠,因此需要选择适合实时计算的语言,而且为了满足可靠度的需求,程序需要有数个冗余的复本,各复本运作在不同的硬件上,以便比对各程序的结果。

MVC模式(Model–view–controller)

软件架构模式

由三个部分组成 : 模型(Model)、视图(View)和控制器(Controller)

模型层 : 程序功能部分 , 包括数据管理和数据库设计

视图层 : 界面(Widget)

控制器 : 负责转发请求,对请求进行处理

MVP模式 (Model-view-presenter)

软件架构模式

在MVC的基础之上延伸出来的架构模式

由三个部分组成 : 模型(Model)、视图(View)和(Presenter)

模型层 : 包含着相关的业务逻辑

视图层 : 界面(Widget)

Presenter : 负责转发请求,对请求进行处理

MVVM模式Model–view–viewmodel

软件架构模式

将视图界面和业务逻辑分离开

由四个部分组成 : 模型(Model)、视图(View)、视图模型(ViewModel)、和 绑定器

模型层 : 内容的数据访问层

视图层 : 屏幕上看到的结构、布局和外观(UI)

视图模型 : 暴露的公共属性和视图的抽象, MVVM没有MVC模式的控制器,也没有MVP模式的presenter

绑定器 : 可以实现数据&UI双向绑定=>数据变更UI自动刷新,UI变更自动同步数据

/ Flutter MVC /

StatefulWiget 就相当于控制层(Controller)负责从模型层(Model)获取数据

View 就是被绑定到StatefulWiget里面的多个Widget

typedef void IMineModelCallBack(var _modelData);

abstract class IMimeModel {

void getMineData(IMineModelCallBack callBack);

}

class MineModel implements IMimeModel {

@override

void getMineData(IMineModelCallBack callBack) {

// TODO: implement getMineData

var _modelData = ‘首页改变后的数据’;

callBack(_modelData);

}

}

class MyHomePage extends StatefulWidget {

MyHomePage({Key? key, required this.title}) : super(key: key);

final String title;

@override

_MyHomePageState createState() => _MyHomePageState();

}

class _MyHomePageState extends State {

var _homeMineData=‘首页改变前的数据’;

void _changeMineData() {

MineModel _model=new MineModel();

_model.getMineData((_modelData) {

setState(() {

this._homeMineData=_modelData;

});

});

}

@override

Widget build(BuildContext context) {

return Scaffold(

appBar: AppBar(

title: Text(widget.title),

),

body: Center(

child: Column(

mainAxisAlignment: MainAxisAlignment.center,

children: [

Text(

‘$_homeMineData’,

style: Theme.of(context).textTheme.headline4,

),

],

  • 14
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值