鲍勃大爷调查提问:两者哪个更昂贵?A.在代码中添加难以更改的功能。B.保持代码足够灵活性以轻松添加新功能。


众说纷纭:
灵活性可能导致更多的设计时间和复杂性。这个词本身看起来不错,但没那么简单。

我现在正在(艰难地)学习到,随着复杂性的增加,维持软件项目中的变化速率变得越来越困难。如果我可以回去一年,我肯定会在设计更多SOLID方面投入更多的前期精力。

我认为灵活性更昂贵。理由:灵活性通常会导致过度抽象,从而过度渗透到测试中。另外,用户可能会注意到性能降低。我宁愿在旧代码上使用TDD,并且仅在测试告诉我需要时才引入灵活性。

我记得历史老师说,在宗教法庭上,可怕的事情是以上帝的名义完成的。我已经看到以OO的名义做的可怕的事情。

我选择A,但我认为B也取决于开发人员/工程师的技能。

这个问题缺乏背景。也许代码很简单,但是很难更改。然后将其丢弃并使用新功能再次编写将更便宜。只要具有有意义的测试更改就很便宜。

最好的方法是:“保持代码“简单”到足以轻松添加新功能。” 另外:“保持足够的回归测试以无畏地添加新功能。” 简单性和回归测试取代了为未知的未来提供灵活性的需求。

有人说灵活性会导致过度投入和过度抽象,但这将意味着代码难以维护。因此,我选择A,因为灵活的代码必须良好且易于维护。

取决于您如何量化技术债务成本

取决于您对“难以改变”的含义以及为何难以改变。

这就像复利-取决于变化率。最初,意大利面条代码的成本较低。随着时间的流逝,变化的速度增加-作为人类,我们希望在更短的时间内得到更多。这时灵活性变得更便宜,而意大利面条式代码开始削弱企业。