密钥接口

2020年4月29日

软件开发团队发现,如果他们尽可能频繁地集成他们的工作,他们的生活会更容易。他们还发现经常投入生产是有价值的。但是团队不想向用户公开半开发的特性。处理这种紧张关系的一种有用技术是构建所有后端代码,集成,但不构建用户界面。这个特性可以被集成和测试,但是用户界面会一直保留到最后,直到它像一个keystone一样被添加来完成这个特性,并向用户展示它。

这种技术的一个简单例子可能是为客户提供紧急订单的选项。这样的订单需要定价,这取决于客户居住的地方以及送货公司在那里的运营情况。所涉及货物的性质影响仓库中使用的领料方法。某些客户可能有资格获得紧急订单,这也可能取决于交货地点、一年中的时间和订购的货物种类。

总之,这是一个相当合理的业务逻辑,特别是因为它将涉及到与各种仓储、目录和客户服务系统的大量集成。这样做可能需要几个星期,而其他功能需要每隔几天发布一次。但就用户而言,紧急订单只是订单上的复选框。

为了使用复选框作为关键点来构建它,团队在几个生产版本的过程中对底层业务逻辑和内部系统接口进行开发工作。用户不知道所有这些潜在的代码。只有在最后一步中,keystone复选框才需要变为可见,这可以在相对较短的时间内完成。这样,所有潜在的代码都可以集成起来,成为系统投入生产的一部分,减少了长寿命特性分支带来的问题。

潜在代码确实需要测试到与激活时相同的置信度。这可以通过设置系统的体系结构来完成,这样大多数测试就不会通过用户界面完成。单元测试以及其他较低层次的测试金字塔这样跑应该很容易。甚至宽堆栈测试可以运行,只要有机制使它们皮下试验. 在某些情况下,UI本身会有大量的行为,但是如果设计允许可视UI是bet188足球卑微的对象.

并不是所有的应用程序都是以这样一种方式构建的:它们可以以一种皮下的方式进行广泛的测试,但是即使没有使用keystone的能力,这样做所需的努力也是值得的。通过UI运行的测试在设置时总是比较麻烦,即使使用了最好的工具来自动完成这个过程。将更多的测试转移到皮下和较低级别的测试,特别是单元测试,可以显著加快速度部署管道使能连续交货.

当然,大多数ui将不仅仅是一个复选框,尽管它们通常不是keystone的更多工作。在web应用程序中,一个复杂的特性通常是一个独立的web页面,它可以被完整地构建和测试,而keystone仅仅是一个链接。一个桌面可能有几个屏幕,其中keystone是使它们可见的菜单项。

也就是说,有些情况下,用户界面不能打包成一个简单的keystone。如果是这样的话,那么是时候使用功能切换. 然而,即使在这种情况下,通过确保特性切换仅适用于UI,考虑keystone也是有用的。这避免了在后端代码中散布大量切换点,降低了应用切换的复杂性,允许使用简单的切换机制,并使在需要时更容易删除。

最后开发一个UI是一个普遍的危险,因为后端代码的设计方式可能在构建后无法与UI一起工作,或者UI直到很晚才得到所需的关注,从而导致缺乏迭代和糟糕的用户体验。基于这些原因,kbet188足球eystone方法在总体方法中最为有效,该方法鼓励通过细垂直切片构建产品,从而快速发布小而全面的功能。

我在这里使用了一个用户界面的例子,但是当然,相同的方法可以用于任何其他界面,比如API。通过最后构建消费者的界面,并保持它的简单性,我们可以在小块中构建和集成甚至大的功能。

暗发射是一种变体,新功能在构建后调用,但不会向用户显示任何结果。这样做是为了衡量对后端系统的影响,这对某些更改很有用。一旦一切顺利,我们就可以添加keystone。

致谢

我第一次在肯特贝克的第二版中看到这种技术的基石的比喻极限编程解释. 皮特·霍奇森、布兰登·达夫和斯蒂芬·史密斯提醒我,我忘记了这件事。

戴夫·法利、保罗·哈曼特和皮特·霍奇森评论了这篇文章的草稿。