macf键与功能键切换

功能分支

如果使用分支,则表示不进行持续集成/部署/交付 !

您可能具有很好的单元测试 代码覆盖率 ,可能正在执行TDD ,可能已经以BDD格式编写了功能和集成测试,并且可能在每次提交到存储库时都运行了所有测试。 但是,如果您有分支机构,则集成会延迟到它们合并之前,这意味着没有连续的集成。

人们倾向于喜欢功能分支。 它们提供了决定发布什么以及何时发布的灵活性。 所有要做的就是合并将发布到主分支中并部署到生产中的功能。 这种方法的问题是延迟。 集成延迟到合并。 在合并完成并且运行所有单元,功能,集成和手动测试之前,我们不知道所有那些单独开发的功能是否都能很好地协同工作。 最重要的是,存在由合并本身带来的痛苦引起的问题。 几天,几周甚至几个月的工作突然合并到主要分支,然后从那里合并到所有尚未发布的分支。 持续集成的思想是尽快发现问题。 发现问题之前的最小延迟。

缓解此问题的最常见方法是使特征分支小且寿命短。 一两天后就可以将它们合并到主分支中。 但是,在许多情况下,这根本不可能。 功能可能太大,无法在短短几天内开发出来。 业务可能要求我们仅与其他功能一起发布它。

换句话说,功能分支非常适合让我们决定发布什么以及何时发布。 它们为我们提供了灵活性,但阻止了我们进行持续集成。 如果只有一个分支,我们可以进行连续集成,但是使用功能分支解决的发布问题将再次困扰我们。

功能切换

功能切换(有时称为功能开关或功能标志)应解决仅部署一个选定的功能集而仅保留一个(主)分支的需求。 有了它们,我们可以在一个分支中完成所有工作,可以进行持续集成,以确保我们的代码质量,并使用标志来关闭功能,直到准备好发布它们为止。 我们可以享受持续集成的所有好处,同时还可以灵活地选择哪些功能可用,哪些功能可以隐藏。 而且,这是朝着持续部署迈出的一步。 如果我们确实具有令人满意的自动测试范围,并且可以打开和关闭功能,则没有什么真正阻止我们将通过所有验证的每个提交部署到生产中的。 即使某些错误潜入产品中,使用Feature Toggles还是很容易将其关闭,直到修复为止。

基本思想是拥有一个配置文件,该文件为待完全释放的功能定义切换。 替代配置文件的可以是数据库表。 应用程序应使用这些切换按钮来决定是否使某些功能对用户可用。 它们甚至可以用于根据用户的角色,地理位置或随机样本向部分用户显示某些功能。

遵循的规则很少:

  • 仅在完全部署并证明其有效之前,才使用切换开关。 否则,您可能会得到“意大利面条代码”,其中充满了if / else语句,其中包含不再使用的旧切换。
  • 不要花太多时间测试切换。 在大多数情况下,足以确认某个新功能的入口点不可见。 例如,可以链接到该新功能。
  • 请勿过度使用切换键。 不需要它们时,请勿使用它们。 例如,您可能正在开发一个新屏幕,可通过主页中的链接访问该屏幕。 如果在该链接的末尾添加了该链接,则可能不需要使它隐藏的切换。

例子

有许多库为功能切换提供解决方案。 但是,实现它们非常容易,您可以选择自己做。

以下是“功能切换”的可能实现的一些示例。 他们使用AngularJS,但是它们背后的逻辑可以应用于任何其他语言或框架。

[带有功能切换的JSON]

{"feature1": {"displayed": false},"feature2": {"displayed": true},"feature3": {"displayed": false}
}

我倾向于在JSON切换中包含更多值。 其中一些功能为禁用,描述,allowed_users等。上面的示例只是最基本的解决方案。

接下来,在此示例中,我们应将JSON加载到AngularJS范围中。

[将功能切换加载到范围的AngularJS]

$http.get('/api/v1/data/features').then(function(response) {$scope.features = response.data;
});

一旦功能切换进入范围,其余的操作就很容易了。 以下AngularJS示例在显示设置为false时隐藏了功能。

[隐藏某些元素的AngularJS HTML]

<div ng-show="features.feature1.displayed"><!--Feature HTML-->
</div>

在某些情况下,您可能正在使用全新的屏幕来替代旧的屏幕。 在这种情况下,以下解决方案可能是解决方案。

[根据功能切换返回URL的AngularJS]

$scope.getMyUrl = function() {if($scope.features.feature2.displayed) {return 'myNewUrl';} else {return 'myOldUrl';}
}

然后,通过HTML,将类似于以下示例。

[切换URL的AngularJS HTML]

<a href="{{getMyUrl()}}">This link leads somewhere
</a>

在某些其他情况下,更改可能在服务器上。 按照REST API最佳实践 ,您将创建一个新的API版本并使用Feature Toggle决定要使用哪个版本。 代码可能像下面这样。

[执行依赖于功能切换的请求的AngularJS]

var apiUrl;
if($scope.features.feature2.displayed) {apiUrl = '/api/v2/myFancyFeature';
} else {apiUrl = '/api/v1/myFancyFeature';
}
$http.get(apiUrl).then(function(response) {// Do something with the response
});

应用于前端的相同逻辑可以应用于后端或任何其他类型的应用程序。 在大多数情况下,它可以归结为简单的if / else语句。

翻译自: https://www.javacodegeeks.com/2014/08/feature-toggles-feature-switches-or-feature-flags-vs-feature-branches.html

macf键与功能键切换

macf键与功能键切换_功能切换(功能开关或功能标志)与功能分支相关推荐

  1. 7.Windows线程切换_时钟中断切换

    绝大部分系统内核函数都会调用SwapContext函数,来实现线程的切换,那么这种切换是线程主动调用的. 如何中断一个正在执行的程序? 异常 比如缺页,或者INT N指令 中断 比如时钟中断 系统时钟 ...

  2. 6.windows线程切换_主动切换

    ida 分析KiSwapThread sub esp, 10h mov [esp+10h+var_4], ebx ;保存当前线程寄存器现场 mov [esp+10h+var_8], esi mov [ ...

  3. python版本切换_怎么切换python版本

    展开全部 (1)分别安2113装 python-2.7.12.amd64.msi python-3.5.2-amd64.exe (python官网下载的) 顺序无所谓(为5261了看着4102方便,我 ...

  4. java中英文切换_中英文切换

    //首页 var zh_index = { "index1":"首页", "index2":"产品实例" }; var ...

  5. 计算机键盘怎么换键,笔记本电脑如何切换键盘_笔记本切换键盘的步骤-win7之家...

    键盘是我们使用电脑必不可少的输入设备,在使用过程中,有时候需要进行键盘切换,比如数字和字母之间的切换,台式电脑切换比较简单,因为它字母跟数字键盘会分开,但是如果是笔记本电脑的话,要如何切换键盘呢?可以 ...

  6. 4 相机切换_价格屠夫、训练伴侣——海鸟4K运动相机简评

    生为一名铁三爱好者,同时也是一名游泳教练,运动相机对我而言简直是刚需,之前写过一篇狗破4的文↓ https://post.smzdm.com/p/ax084659/ 也写过铁三训练的文↓看完记得回来, ...

  7. 4 相机切换_新手必读 | iPhone手机的自带相机操作完全指南

    每一个热爱生活的人 都关注了"手机摄影技巧" 今天和大家来详细讲解苹果手机自带相机的操作,自带相机中有很多隐藏的功能,也有些功能是很常用的,有些不常用,我们都来详细说一说,尤其是还 ...

  8. 电脑大小写怎么切换_苹果怎么切换电脑便签?可以自由切换的电脑便签手机日历怎么备注特殊日子?苹果手机日历特殊日子提醒便签...

    电脑上有很多使用的软件可以选择,不同的软件有着不同的辅助功能,在使用电脑的时候,如果想要随手记一些事情的话,可以使用便签(又叫便笺).那么电脑便签的内容与内容直接如何切换呢?可以自由切换的电脑便签是哪 ...

  9. Spring Boot 2中的功能切换

    无论您是否喜欢,软件开发都是一项协作活动. 整合工作一直被妖魔化,并被视为必不可少的邪恶. 有几种方法可以解决有效集成的挑战. 功能切换开关属于该组. 在本文中,您将在实践中看到如何在Spring B ...

最新文章

  1. Java CSV文件读取、写入及追加
  2. 福利 | 给你个机会与俞士纶(Philip S. Yu)面对面交流 !(附俞教授论文合集资源)...
  3. Gartner:预计2018年人工智能行业总价值达1.2万亿美元
  4. 使用树莓派(Raspberry Pi)远程GPIO
  5. boost::contract模块实现separate body的测试程序
  6. 期刊论文格式模板 电子版_期刊论文的框架结构
  7. SVO: Fast Semi-Direct Monocular Visual Odometry
  8. ExtJs中ComboBox使用之技巧
  9. Security+ 学习笔记27 灾后恢复
  10. 打造AS酷炫dimens适配插件
  11. 怎么给视频去水印?手把手教你去水印
  12. 往事如烟随风,切如梦初醒
  13. quartz 表结构 mysql_Quartz表结构说明
  14. MATLAB与线性代数--简化阶梯矩阵
  15. 直线型一阶倒立摆3---控制器设计
  16. 关于错误local variable ‘str‘ referenced before assignment
  17. html js 做一个钟表,html,css,js实现的一个钟表
  18. Rais.vim 配置问题
  19. Microsoft Visual SourceSafe 使用说明详解
  20. arcade 物理系统_RetroPie和X-Arcade Tankstick-完美的Retro Arcade(加上键绑定,配置和操作方法)

热门文章

  1. 黑马程序员匠心之作|C++教程从0到1入门编程-c++核心编程
  2. 开快递代收点挣钱吗?怎么盈利?
  3. python 百度云搜索引擎入口_2016最新百度云网盘搜索引擎源码,附带Python爬虫+PHP网站+Xunsearch搜索引擎...
  4. 计算机电源输出电压 电流,电脑USB接口的输出电压以及电流你知道吗?
  5. Unable to install breakpoint in
  6. 玩家就是宇宙,而你就是那个玩家——谈Minecraft
  7. 心电图前波过多_心电图老也搞不清的那些波啊——δ波
  8. MP地面站在飞行数据显示界面显示自己想显示的数据
  9. WeWork中国首个创新项目即将落地武汉;中联重科新材料总部将落户湘阴 | 美通企业日报...
  10. 关于Markdown编辑器