花了一些时间在 Haskell 和其他函数式语言中玩耍后,我开始欣赏从概括描述问题而来的设计的简单性。虽然模板编程的许多方面可能远非简单,但有些用途很常见,我认为它们不会妨碍清晰(尤其是函数模板)。我发现模板通常可以简化当前设计,同时自动添加一些未来阻力。为什么要将它们的功能降级给库编写者?
另一方面,有些人似乎避免使用像瘟疫这样的模板。十年前我可以理解这一点,当时泛型类型的概念对于大多数编程社区来说都是陌生的。但是现在所有流行的静态类型 OO 语言都支持一种或另一种形式的泛型。增加的熟悉度似乎需要对保守态度进行调整。
最近有人向我表达了这样一种保守的态度:
你永远不应该做任何比必要的更通用的东西——软件开发的基本规则。
老实说,我很惊讶看到这种说法如此不屑一顾,好像它应该是不言而喻的。就我个人而言,我发现它远非不言而喻,除非您另有说明,否则像 Haskell 这样的语言都是通用的。话虽如此,我想我明白这种观点的来源。
在我的脑海里,我确实有类似的规则在喋喋不休。现在它处于最前沿,我意识到我总是从整体架构的角度来解释它。例如,如果您有一个类,您不想在其中加载大量您可能有一天会使用的功能。如果您只需要一个具体版本,请不要费心制作接口(尽管可模拟性可能与此相反)。像这样的东西...
然而,我不做的是在微观层面上应用这个原则。如果我有一个没有理由依赖于任何特定类型的小型实用函数,我将制作一个模板。
那你怎么看,所以?你认为什么是过度概括?这条规则是否根据上下文有不同的适用性?你甚至同意这是一条规则吗?