时隔16年Jeff Barr重返10.23-25 QCon上海站,带你看透AI如何重塑软件开发! 了解详情
写点什么

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

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

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

关注

评论

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

前端常考vue面试题(必备)

yyds2026

Vue 前端

一文彻底读懂webpack常用配置

Geek_02d948

JavaScript 前端

NCCL源码解析①:初始化及ncclUniqueId的产生

OneFlow

人工智能 深度学习

GPT-4问世;LLM训练指南;纯浏览器跑Stable Diffusion

OneFlow

人工智能 深度学习

彻底搞懂nodejs事件循环

coder2028

JavaScript 前端

一文彻底搞懂前端缓存机制

hellocoder2029

JavaScript 前端

LeetCode题解:137. 只出现一次的数字 II,哈希表,JavaScript,详细注释

Lee Chen

JavaScript LeetCode

基于rsync实现海量文件高速传输的解决方案

镭速

21天吃透这套字节面试题后,我成功跳槽进了字节,税后25K

Java 数据结构 面试 算法

美团前端高频面试题集锦

Geek_02d948

JavaScript 前端

前端经典面试题(有答案)

coder2028

JavaScript 前端

2023秋招前端面试必会的面试题

Geek_02d948

JavaScript 前端

拿到大厂前端offer的前端开发是怎么回答面试题的

hellocoder2029

JavaScript 前端

深圳高新技术企业申请条件以及流程简单说明

行云管家

高新企业 高新技术 高新

行云管家堡垒机客服电话是多少?谁知道?

行云管家

网络安全 数据安全 堡垒机 行云管家

《三体》问题

蓬蒿

CPU 寄存器 延时

你需要知道的webpack高频面试题

Geek_02d948

JavaScript 前端

【小程序案例】支付宝小程序-MQTT模器,IoT设备通过WSS接入阿里云IoT物联网平台——设备接入类

阿里云AIoT

JavaScript windows 物联网

【记】滑动拼图验证码在搜索中的作用

宙哈哈

Python html 验证码

通过微信小程序体验阿里云IoT物联网平台——设备接入类

阿里云AIoT

物联网

如何评估某活动带来的大盘增量 | 得物技术

得物技术

AI 数据

SpringBoot中事件与通知

石臻臻的杂货铺

spring springboot

2023秋招前端面试必会的面试题

coder2028

JavaScript 前端

一文读懂Js中的this指向

hellocoder2029

JavaScript 前端

协同存储,为边缘计算创造更大价值

阿里云CloudImagine

云计算 边缘计算

Nautilus Chain 现已推出测试网“Triton ”,有哪些潜在的机会?

西柚子

ArkUI中的线程和看门狗机制

OpenHarmony开发者

OpenHarmony

深入nodejs的event-loop

coder2028

JavaScript 前端

前端常考面试题整理

hellocoder2029

JavaScript 前端

认识一下,我们是应用社交「幕后大佬」 IM 家族

融云 RongCloud

即时通讯 IM

如何提升运维的效率,可以用小程序试试

没有用户名丶

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