2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

面向对象设计原则与函数式编程

  • 2014-03-31
  • 本文字数:736 字

    阅读完需:约 2 分钟

Richard Warburton 最近在演讲中讲到,面向对象编程有诸多公认的设计原则,比如 SOLID 原则,但是转向函数式编程后,许多开发人员就不知道如何运用这些设计技巧了。

Mark Seemann 在最近的一篇博客中也就同一主题发表了自己的看法,如果你能将 SOLID 原则发挥到极致,那么函数式编程同样非常吸引人。

Richard 是伦敦 JCP 委员会的一员。在演讲中,他认为 SOLID 原则——由 Robert C. Martin 在 21 世纪初期提出——是公认的面向对象编程设计原则之一,并仔细分析了 SOLID 的五个原则,试图找出与函数式相同或者至少与某一功能相关的蛛丝马迹。

根据 Richard 的经验,尽管许多开发人员不知道在函数式设计中如何使用已有的设计技巧,但是函数式编程往往有助于实现 SOLID 原则,并且在实现面向对象的封装方面,函数式思维确实能够助你一臂之力。

Richard 得出的结论是每个 SOLID 原则与函数式都有对应关系。我们不用放弃那些已有的设计模式;与之相反,通过简化或清理,或者以一种简化方式使用这些已有知识,我们还能改善已有设计模式。

Mark 是一位软件架构师并兼职独立顾问。以他的经验,SOLID 原则可以促成一种设计风格,而且该风格使函数式编程颇有吸引力。

当使用 SOLID 原则中的单一职责原则( SRP )和接口隔离原则( ISP )时,最终的结果是代码库中有很多细粒度接口和类,每个这样的类和接口只有一个方法。

所以 Mark 由此得出结论,如果因为反复使用 SOLID 原则而导致很多只有一个方法的小类,那么我们可以将函数建模成具有数据的行为,这也可能是转向函数编程语言的机会,如 F#语言。


感谢臧秀涛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-03-31 07:574853
用户头像

发布了 28 篇内容, 共 12.2 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

大数据应用场景

dongge

2020-08-29-第十二周作业

路易斯李李李

AtlassianTeam Playbook | 用户体验中的移情地图

Atlassian

团队管理 敏捷开发 Atlassian

云计算、人工智能、大数据技术三者之间的关系

cristal

人工智能 云计算 大数据

kubernetes node affinity 写法

Geek_f24c45

Kubernetes

Flink SQL FileSystem Connector 分区提交与自定义小文件合并策略

Apache Flink

flink

oeasy教您玩转linux010201持续输出yes

o

【Spring Boot系列】之多种依赖集成方式

语霖

Docker 私有镜像仓库的搭建及认证

哈喽沃德先生

Docker 容器 微服务 镜像

所按非所得——聊一聊StandHogg漏洞

OPPO安全

安全攻防 安全 安全开发 漏洞

大数据解答(一)

dony.zhang

大数据 mapreduce

计算机网络基础(二十二)---传输层-套接字与套接字编程

书旅

TCP 计算机网络 TCP/IP

FlinkX 如何读取和写入 Clickhouse?

Apache Flink

flink

2020-08-29-第十二周学习总结

路易斯李李李

Week 12 学习总结

Jeremy

互联网人必备知识cookie和session认证

架构师修行之路

分布式 身份认证 session Cookie

甲方日常 5

句子

工作 随笔杂谈 日常

Atlassian Team Playbook | 用户体验画布挖掘业务价值

Atlassian

团队管理 敏捷开发 Atlassian

听说,阿里云给它的 OpenAPI 开发了一套编程语言

郭旭东

阿里云 OpenAPI

42图揭秘,「后端技术学些啥」

我是程序员小贱

cookie和session的关系看这一篇就够了

架构师修行之路

session Cookie

我所在公司和大数据

2流程序员

架构师训练营第十二周总结

Hanson

你真的知道什么是线程安全吗?

老胡爱分享

并发编程 线程 java 并发

3种 Springboot 全局时间格式化方式,别再写重复代码了

程序员小富

Java springboot

架构师训练营第十二周作业

Hanson

架构设计开学第一天

escray

学习 从零开始学架构 架构师预科班

架构师训练营 -- 第 12 周作业

stardust20

第九周

Acker飏

Week 12 命题作业

Jeremy

微服务架构下的系统集成

码猿外

架构 微服务 系统集成

面向对象设计原则与函数式编程_后端_Jan Stenberg_InfoQ精选文章