5
接口(OOP)的语义约定是否比功能签名(FP)更具信息意义?
有人说,如果您将SOLID原理付诸实践,那么您最终会从事函数式编程。我同意本文的观点,但是我认为从接口/对象到函数/闭包的转换会丢失一些语义,并且我想知道函数式编程如何减轻这种损失。 从文章: 此外,如果您严格地应用接口隔离原理(ISP),您将了解您应该比角色头接口更喜欢角色接口。 如果您继续将设计推向越来越小的界面,那么最终您将获得最终的角色界面:使用单一方法的界面。这在我身上经常发生。这是一个例子: public interface IMessageQuery { string Read(int id); } 如果我依赖IMessageQuery,则隐式合同的一部分是调用Read(id)将搜索并返回具有给定ID的消息。 将此与对其等效功能签名的依赖进行比较 int -> string。没有任何其他提示,此功能可能很简单ToString()。如果您使用A实施IMessageQuery.Read(int id),ToString()我可能会指责您故意颠覆性! 那么,函数式程序员可以做什么来保留命名接口的语义?例如,创建具有单个成员的记录类型是常规做法吗? type MessageQuery = { Read: int -> string }