SOLID 原则可以用于高性能代码吗?

xvt*_*vtk 5 architecture performance solid-principles

我曾经在一个专门从事高性能 C++ 代码的团队工作。为了从代码中挤出每一点性能,使用了不明显和微妙的技巧,使其难以阅读。Robert C. Martin 的“Clean Architecture”一书宣传了 SOLID 架构原则:通过依赖倒置、一次性原则等来解耦代码。额外的层和严格遵守接口似乎会妨碍某些技术以获得更好的性能。是否必须在高性能和 SOLID 架构之间做出选择?

jac*_*646 4

是否必须在高性能和 SOLID 架构之间做出选择?

当然,这个问题唯一合理的答案可能是,这取决于您所说的高性能是什么意思。但这个答案意味着 SOLID 和性能在某种程度上是相关的。

可以公平地说,OOP 原则和模式一般并不关注性能,即它们的明确目的不是提高甚至维持任何特定的性能水平。甚至可以公平地说,实现这些 OOP 目标的最常见机制会降低大多数常见 OO 语言的性能(尽管程度很小)。

另一方面,可以公平地说,在大多数有关这些实践的文档中,性能并不是一个特定的目标。因此,没有什么可以阻止您将它们适应性能关键型应用程序。

我发现稍微修改一下问题很有用,以便得出有趣的答案。例如,

超优化的代码是否与允许做出一些性能让步的代码一样具有可读性?

显然不是。可读性、可维护性、可扩展性等都不是免费的。为什么他们应该这样?软件工程中没有免费的午餐。一切都是权衡。如果不能牺牲一丁点性能,为什么还要期望最高的代码质量呢?性能是机器的语言。质量是人类的语言。这两者之间总是存在阻抗不匹配。

你不应该做的一件事是得出这样的结论:如果可以通过违反原则来提高绩效,那么原则就可以被忽略。很少有应用程序将性能作为主要关注点。在大多数人们认为是的应用中,事实并非如此。即使在性能至关重要的应用程序中,这也不是唯一的问题。例如,如果计算错误,瞬时计算就没有什么价值。当普通程序员无法理解时,计算出错的可能性就大得多。

软件工程中的一切都是权衡。只是不要将相对值与绝对值混淆。标题的答案是肯定的,但您可能需要确定应用哪些原则以及在何处应用。性能并不能免除您对质量的考虑。它只会使您的工作变得更加复杂,因为除了质量之外您还必须考虑性能。