flutter的 redux,应该用还是不应该用.

flutter也算是火的了.

涉及到主要问题就是状态管理了,现在状态管理框架也非常多.其中redux就是从前端来的概念,也有人移植到了flutter里面了

阿里也出了fish-redux,这个定位是,不只是一个状态管理框架.

各种努力之下,我也用了一下redux,fish-redux.当然这些设计是非常优秀的.但是问题来了.

我花的时间太多了,我浪费了好多时间,画了类图,序列图,弄清楚了它是如何工作的,然后开始写代码了.

一堆的类,文件,函数,头疼.而且示例中的view,reducer,effect,名字也一样,当你看到一个函数,区分不了它是哪个文件的.

 

我下载了闲鱼,初步一看,apk里肯定是有libflutter.so, 但是我看到了更多的classes.dex,还有其它的东西.我不知道闲鱼有多少页面是用flutter开发的,只是猜测,也许只是一部分,甚至是一小部分用上它.

 

rn的时代,很多项目是用了rn,但是少有整个app用rn的,多数还是native为主,rn为辅,当年花了很多力气在rn上面,然后收益甚微,这难道要发生在flutter上?

还没有见过大型的app,全部,或是大多数用flutter开发的.

假如用它,更多的场景是,我在一个原有的大中型app上,嵌入部分的页面,但依然是native为主.

一个中小型的app,为了省时间,人力,资源,可能用它开发.

 

于是,我开始怀疑了, 如果我只是嵌入了少量的页面,我为何要用redux,它是贫血模型+reducer==oop ?,单向数据流.算是一种新的编程思想,我不关心它的好与坏, 但是它的成本高很多,虽然状态只能通过reducer改动, 也好管理, 可是我认为它的成本大于收益,就算只是简单修改一个属性值,我还是要写一堆的'无用'代码,我心累.

考虑到google的官方推荐provider,我开始认为,这也许是一种更好的方式,redux也许很优秀,react的前端还有许多框架,插件,来配合这一套操作.但是函数式的方式,难懂,我宁愿选择oop.因为我已经习惯了.我用flutter是基于成本, 效率上的考虑,但我用了redux, 洽洽又把这优势抵消了.

有人会怀疑,后期维护性,扩展性的问题, 但你要考虑到,80%的页面,都是简单的业务,真有必要考虑到这些?而且用一个优秀的框架,就能保证业务不会写烂? 是不是没见过用了spring,但业务依然写的很烂的, 难道是spring的错?

更新一个东西,我要发一个action,修改还不在这里. 除了一堆看似莫名其妙的函数, 我已经不想写代码了. 

用上flutter的app, 有多少是因为省资源的,假如为了省资源,那么开发人员很可能只有一个, 或是三四个, 那么不存在协作的问题.

 

于是,我的结论就是:

一个原有的app,嵌入的页面数量不大,功能不复杂,也没有那么多共享的状态需要管理. 就不要折腾自己了.provider更好.

一个新写的大中型app, 多人协作开发, 不仅共享状态,也可能多团队中共享基础业务, 我有理由使用redux,fish-redux, 因为它们更规范.

flutter_redux具有了redux的所有缺点,因为它基于redux写的.全局一个状态, p大点事,也要放全局, 这合理么?

fish_redux,为每一个page创建一个store,bus,等.这些页面销毁后,store也销毁了.它是基于redux的思想,但和redux这个库无关.当然它也有全局的store,假如要实现页面间的共享,同样还是,p大点的东西也要放全局. 产生的类尤其多,上层组装,下层实现,一个简单的页面,上下两层要10个文件.假如业务大了,那么可以看到一堆的view,reducer,state...... 函数名,文件名, 我更头疼了, dart也不要求类名与文件名一致, 顶级函数更是写哪里都可以.

等我更深入地理解了函数式编程, 我再来考虑这些东西吧.我只是一个习惯了oop编程思想的程序员.

 

除了根据嵌入的业务量来考量,人力成本也不可忽视,redux,单向数据流,reducer+middleware操作时,也没有上下文,只能用旧的状态复制出新的, 处理完成要根据各种状态进行判断, 晦涩难懂,虽然代码量极少. 

不可否认,它的设计是优秀的, 我想,如果整个app用这一种方式, 会是不一样的结果.可是rn也好flutter也好,都是半路出家的,不可能替代了native.所以它就是庶出,继承不了家产,于是这种方式,有时成为了一个负担.

不能因为一个女人长的漂亮,就认定她聪明,能干,有修养,颜值就是正义.

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter Redux 是一种用于管理 Flutter 应用状态的开源库,它基于 Redux 设计模式。Redux 的核心思想是将应用的状态存储在一个单一的数据源(store)中,通过修改 store 中的状态来更新应用的 UI。Flutter Redux 可以让你轻松地实现这种模式,从而更好地管理应用的状态。 下面是如何使用 Flutter Redux 的简单步骤: 1. 安装 Flutter Redux 包 在你的 Flutter 项目中,添加 Flutter Redux 包到你的 `pubspec.yaml` 文件中: ``` dependencies: flutter_redux: ^0.8.2 ``` 然后运行 `flutter packages get` 命令来安装依赖包。 2. 创建 Store 创建一个新的文件来表示你的应用状态,并创建一个新的 Store 对象来存储应用的状态。 ```dart import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; enum Actions { Increment, } int counterReducer(int state, dynamic action) { if (action == Actions.Increment) { return state + 1; } return state; } final store = Store<int>(counterReducer, initialState: 0); ``` 在上面的示例中,我们创建了一个名为 `counterReducer` 的函数来处理应用状态的变化。我们还创建了一个名为 `store` 的全局变量来存储应用状态。 3. 创建 Widget 创建一个新的 Widget 并将 Store 传递给它。 ```dart class CounterWidget extends StatelessWidget { @override Widget build(BuildContext context) { return StoreProvider<int>( store: store, child: MaterialApp( title: 'Counter App', home: CounterPage(), ), ); } } class CounterPage extends StatelessWidget { @override Widget build(BuildContext context) { return StoreConnector<int, int>( converter: (store) => store.state, builder: (context, count) { return Scaffold( appBar: AppBar(title: Text('Counter')), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( '$count', style: Theme.of(context).textTheme.display1, ), RaisedButton( child: Text('Increment'), onPressed: () { store.dispatch(Actions.Increment); }, ), ], ), ), ); }, ); } } ``` 在上面的示例中,我们创建了一个名为 `CounterWidget` 的 Widget,并将 `store` 传递给 `StoreProvider`。然后我们创建了一个名为 `CounterPage` 的 Widget,该 Widget 使用 `StoreConnector` 来将 Store 中的状态映射到一个 Widget 中。我们还在 `RaisedButton` 上注册了一个点击回调函数,该函数将触发一个 Action 来更新 Store 中的状态。 4. 运行应用 现在你可以运行你的应用并看到一个简单的计数器应用程序。当你点击按钮时,计数器会增加。这是因为我们在 Store 中注册了一个 Reducer 函数来处理该 Action 的状态变化。 这只是 Flutter Redux 的基础用法,你可以在官方文档中找到更多的示例和 API 文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值