我来自OOP语言,熟悉面向对象设计的坚实原则。其中一些似乎适合函数式编程模型,而其他部分在缺乏状态的世界中毫无意义。重构功能代码是否有一套类似的原则?
发布于 2011-04-07 16:49:40
据我所知(我不是专家),可靠的原则不能说明任何关于状态的东西。它们也应该适用于函数式编程语言。他们更多的是关于如何实现模块化的建议。
其中一些是相当明显的,或者至少是众所周知的。单一责任是UNIX的原则“做一件事,做好它”,这在“组合”被广泛使用的函数式语言中更为流行,同样。接口分离原则也是非常自然的(让你的接口模块化,并保持正交概念的分离)。最后,依赖反转只是“抽象”的一个名称,在函数式编程中无处不在。
"OL“原则,开放/封闭和LSP,更多地面向作为核心软件工程概念的基于继承的语言。默认情况下,函数式语言值/模块没有开放递归,因此“实现继承”只在非常特殊的情况下使用。最好是合成图。在这种情况下,我不确定您应该如何解释开放/关闭原则。你可能会认为它是关于封装的,函数式程序也大量使用,使用抽象类型等。
最后,Liskov替换原则似乎与继承有关。函数式语言并不总是使用子类型,但当它们使用子类型时,确实假设“派生类型”应该保留“基本类型”的规范。函数式程序员当然会小心地指定和尊重他们的程序、模块等的接口和属性,并且可能会使用代数推理(这等同于此,所以我可以替换...)然而,一旦你摆脱了“默认继承”的思想,你就不会有太多的接口冲突问题,所以LSP并不像在OOP中那样被强调为一个重要的保障。
发布于 2014-07-14 16:28:04
This video介绍了可靠的原则,以及如何在Clojure中应用这些原则。
它展示了这些原则在函数式世界和OOP中是如何成立的,因为我们仍然需要解决相同的潜在问题。总体而言,这让我认为函数式编程更适合于可靠的设计。
发布于 2020-06-23 13:36:39
实际上,SOLID可能是一个更好的函数式编程原则:
Only do one thing是从命令式编程中脱颖而出的。有小的、有焦点的函数是很好的。允许你在不修改代码的情况下改变行为的
在函数式编程中,遵守某些接口约定的
在函数式编程中,将参数指定给函数(或使用更高阶的函数来检索参数)而不是硬编码函数以获取某些值,在函数式编程中与在object-oriented.中一样好
即使在进行面向对象的编程时,这些原则中的许多也适用于对象中的方法的设计。
https://stackoverflow.com/questions/5577054
复制相似问题