美文网首页Flutter
Flutter代码可插拨/解耦方案

Flutter代码可插拨/解耦方案

作者: twj小鱼儿 | 来源:发表于2021-08-02 10:32 被阅读0次

背景

因为Flutter禁止了动态特性及反射,所以Flutter代码无法实现运行时分离,只能在编译时分离。基于这个背景,uncoupling提供了物理分离的方案,因为基于dart实现的,所以不需要依赖第三方的运行环境。

应用场景

  • 当想写死部分测试代码供开发或测试临时使用,又要避免上线时把这些代码带到包里去的时候,可以使用这种方式;
  • 当想打出来的包想临时或永久分离掉其它业务线的干扰代码时,每次人工分离太烦琐也容易出错,可以使用这种方式;
  • 任何时间不同业务团队的开发、测试人员共用同一分支代码时可以通过配置编译出不同内容的包;
  • 总之,根据配置项自动动态改变工程代码,避免人为出错,编译出不同的包。

原理

uncoupling使用了标记的方式,直接操作文件代码以实现代码物理方式的灵活插入与抽取,对工程没有任何侵入性,简单易用。

使用方式

将uncoupling目录拖入工程根目录(原则上适用于任何目录)。

步骤1:在需要分离的地方添加标记节点,不同内容的节点名node不能相同。

///@@[plugin.node]@begin
[your code]
///@@[plugin.node]@end

步骤2:在uncoupling/run.dart中配置标记节点及内容

var _pluginNodeContent = {
"[plugin]" : {"[node]" : '''[content]'''}
};

如上所示步骤1和2,参数描述如下:
[plugin]: 节点集合,如插件可以归类为一个集合并命名demo;
[node]: 节点,用于标记代码块,每个代码块代表一个节点,如防非下某个任务跳转代码块 xxtask;
[content]: 节点内容,带格式的代码块内容,用'''标记;

步骤3:在uncoupling/run.dart中配置需要分离的dart代码目录及配置文件

const _dartRootDirectory = "./lib";
const _configPaths = [
"./pubspec.yaml",
"./config_plugin.sh"
];
String _exportBizDirectory = "./uncoupling/biz";

变量描述如下:
_dartRootDirectory: dart代码根目录,默认./lib
_configPaths: 配置文件,如pubspec.yaml
_exportBizDirectory:进行分离操作时临时存取抽取的代码,方便步骤2批量操作,如步骤2已配置完整可以不用

步骤4:执行命令

抽取全部命令: cd <root directory>; dart uncoupling/run.dart -p demo -m clear

抽取部分命令: cd <root directory>; dart uncoupling/run.dart -p demo -m add -n xxtask

插入(全部/部分)命令: cd <root directory>; dart uncoupling/run.dart -p demo -m add

-p <plugin name>[demo] 插件名,如示例: demo

-m <method>[clear/add/del] 操作方法,如示例: clear;clear表示清除全部标记内容,add表示全部或部分标记内容,del表示删除部分标记内容

-d <rootDirectory>[default: ./lib] dart代码根目录

-n <node>[default: all, value such as: home,task,alarm] 节点内容,配合add和del部分标记内容使用

-e <export file>: export file that contains plugin contents, be effective to method clear and del. 临时导出clear或del操作时的节点内容

github地址

相关文章

  • Flutter代码可插拨/解耦方案

    背景 因为Flutter禁止了动态特性及反射,所以Flutter代码无法实现运行时分离,只能在编译时分离。基于这个...

  • 1、MVC模式和MVT模式

    解耦 1.解耦:不同的代码块之间降低耦合2.向后兼容:代码更新迭代3.增强代码的可扩展性和可移植性,以提高向后兼容...

  • 解耦

    解耦 对于大型重构, 最有效的手段就是 解耦, 解耦的目的使实现代码高聚合、松耦合。 解耦为何如此...

  • 2022-05-01代码重构 -- 大小规模重构

    大规模高层次重构 解耦代码 “解耦”为何如此重要? 过于复杂的代码往往在可读性、可维护性上都不友好。解耦保证代码松...

  • 青团社拆包依赖-QDepend

    青团社业务发展愈发多样,Android使用模块化设计进行业务的解耦,在代码都解耦上我们已经有一套方案,但在工程的模...

  • iOS组件化及架构设计(转)

    一篇开源代码的组件化方案 关于组件化 网上组件化的文章很多。很多文章一提到组件化,就会说解耦,一说到解耦就会说路由...

  • 设计模式

    设计模式要干的事情就是解耦。创建型模式是将创建和使用代码解耦,结构型模式是将不同功能代码解耦,行为型模式是将不同的...

  • iOS解耦方案

    解耦方案是针对AppDelegate,通过消息的转发、GCDMulticastDelegate代理的一对多模式来实...

  • 《AWS 云计算实战》笔记(十)——基础设施解耦

    基础设施解耦:ELB 与 SQS AWS 的解决方案: 弹性负载均衡器(ELB),用于同步解耦。Applicati...

  • App组件化

    优点 业务分层、解耦,使代码变得可维护;有效的拆分、组织日益庞大的工程代码,使工程目录变得可维护;便于各业务功能拆...

网友评论

    本文标题:Flutter代码可插拨/解耦方案

    本文链接:https://www.haomeiwen.com/subject/psbdvltx.html