写点什么

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

  • 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:574777
用户头像

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

关注

评论

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

一个用于学习KVM的迷你虚拟机

ScratchLab

虚拟机 虚拟化 kvm VT-x

自己动手写Docker系列 -- 5.1实现容器的后台运行

Docker

2022 年顶级机器学习算法和 Python 库,【原理+实战+视频+源码】

程序媛可鸥

Python 程序员 面试

40行不到的Python代码实现超燃动态排序图,成为一名合格Python架构师

程序媛可鸥

Python 程序员 面试

谭中意:玩魔兽、爱做饭、看毛选,而我是个开源人

腾源会

开源 腾源会

掌握《网络》,见微才能知著

蔡农曰

TCP https 网络 HTTP TCP/IP

2万字详解测试金字塔

俞凡

最佳实践 测试 研发效能

模块九:毕业设计

黄秀明

「架构实战营」

云上业务配置选型的一些小Tips

穿过生命散发芬芳

3月月更

手把手教你用 Vue 搭建带预览的「上传图片」管理后台

蒋川

Vue vue admin

一个LabVIEW控件,生成模拟波形效果

不脱发的程序猿

数据可视化 LabVIEW 生成模拟波形效果

从简单代码入手,分析线程池原理

架构 线程池 池化思想

ICT的圣杯(三):产业融合的技术乐章

脑极体

【面试-经验之谈】面霸是如何养成的,他的路子真的野

测试猿温大大

面试 涨薪 测试工程师

高并发架构实战课 期中测试:某达架构设计说明书

👽

李智慧 高并发架构实战课 李智慧

在 Node.js 中使用 Yaml 编写API文档

devpoint

node.js API yaml swagger 3月月更

bigdata作业2

Pyel

面试突击32:为什么创建线程池一定要用ThreadPoolExecutor?

王磊

java面试

《不敢止步》--读书笔记

stars

尤达 DDD 领域驱动设计思想 第四章作业(使用事件风暴建模法对SmartRM系统的交易域重新建模)

代廉洁

尤达DDD领域驱动设计思想

小程序电商业务微服务架构及微服务框架模式

「架构实战营」

Ubuntu18.04下QT开发Android无法连接设备问题解决

DS小龙哥

3月月更

4 行代码实现批量、快速安装 Python 第三方库,价值2000元的学习资源泄露

程序媛可鸥

Python 程序员 面试

DataFrame转字典、列表、元组操作汇总,学生会面试题选择题

程序媛可鸥

Python 程序员 面试

LabVIEW实现CRC校验

不脱发的程序猿

LabVIEW CRC校验

工作想法小计(5):3/7 - 3/18

非晓为骁

个人成长 细节 工作想法

用 Go 语言打造一个全新的 kv 存储引擎

roseduan

Go KV存储引擎

聊一聊C语言位域/位段

不脱发的程序猿

C语言 嵌入式开发 位域/位段

腾讯一面:说一说 MySQL 中索引的底层原理

老周聊架构

MySQL 3月月更

10 行 Python 代码自动清理电脑内重复文件,解放双手!

程序媛可鸥

Python 程序员 面试

eNSP检测不到网卡信息——WinPacp,附带学习经验

程序媛可鸥

Python 程序员 面试

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