写点什么

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

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

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

关注

评论

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

Spring Cloud Alibaba 实战

Damon

微服务 SpringCloud Alibaba 6月日更

拉仇恨!webhook + 企业微信给同事做了个代码提交监听工具

程序员小富

Java GitHub 编程 程序员 代码

Flink+Alink,当大数据遇见机器学习!

博文视点Broadview

云原生中定时弹性伸缩之CronHPA实战

雪雷

6月日更

Java 中 HashSet 的 removeAll 性能分析

落日楼台H

Java 性能 HashSet removeAll 集合删除

[万字总结] 一文吃透 Webpack 核心原理

范文杰

大前端 webpack 6月日更

NQI质量基础设施“一站式”服务平台开发解决方案

源中瑞-龙先生

开发 解决方案 NQI 质量基础设施“一站式”

react源码解析3.react源码架构

全栈潇晨

React React Hooks react源码

【Flutter 专题】115 图解自定义 View 之 Canvas (四) drawParagraph

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

云网络开山之作,揭秘云上高速公路的十年技术成果!

博文视点Broadview

自适应微服务治理背后的算法

万俊峰Kevin

微服务 自适应 服务治理 Go 语言

Rust从0到1-泛型-trait

rust 泛型 Trait generic

chia奇亚挖矿系统开发案例介绍丨chia奇亚挖矿源码功能

系统开发咨询1357O98O718

火爆全网的迁移学习简明手册全面更新,重磅出版上市!

博文视点Broadview

anyRTC SDK 5月迭代:优化自定义加密功能,让通信更安全

anyRTC开发者

音视频 WebRTC sdk

fil云算力系统开发具体流程丨fil云算力开发源码成品

系统开发咨询1357O98O718

《面试官:谈谈你对索引的认知》系列之B+树

架构精进之路

MySQL 索引结构 6月日更

图表示学习+图神经网络:破解AI黑盒,揭示万物奥秘的钥匙!

博文视点Broadview

你的同事是你的竞争对手吗?

石云升

战略思考 职场经验 6月日更

Chia奇亚云算力挖矿系统开发成功案例丨Chia奇亚挖矿源码成品

系统开发咨询1357O98O718

LeaRun .Net Core/Java工作流引擎,分离式前端,升级Vue

雯雯写代码

Vue 工作流引擎

网络攻防学习笔记 Day32

穿过生命散发芬芳

网络攻防 6月日更

为什么说混合云是新基建的流行架构?

博文视点Broadview

书单 | 5月畅销新书情报,你最Pick哪一本?

博文视点Broadview

【Vue2.x源码学习】第一篇-源码环境搭建

Brave

源码 vue2 6月日更

基于MySQL Binlog 实现可配置的异构数据同步

王博

40 图|硬核解析用 Mac M1 玩转 SpringCloud

悟空聊架构

Spring Cloud Mac SpringCloud Alibaba m1 6月日更

Grpc-go源码刨析

王博

项目又延期了

escray

学习 极客时间 朱赟的技术管理课 6月日更

基于开源Tars的动态负载均衡实践

vivo互联网技术

负载均衡 TARS

C 语言面向对象的封装方式

实力程序员

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