写点什么

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

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

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

关注

评论

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

城墙上的“云镜派”,如何守护云上资产安全?

脑极体

Hibernate 如何生成 JPA 的 Metamodel

HoneyMoose

IntelliJ IDEA 的 Metamodel 配置

HoneyMoose

react源码解析19.手写迷你版react

buchila11

React

面试突击15:说一下HashMap底层实现?及元素添加流程?

王磊

尚硅谷《MySQL高级特性篇》教程发布

@零度

MySQL

架构师实战营3期毕业设计

小饭🍎

ReactNative进阶(十四):初探 Gradle

No Silver Bullet

Gradle React Native 1月月更

元宇宙,以区块链为核心的Web3.0数字生态

CECBC

Java 常用类大讲解!3️⃣(手写 API、源码必备)

XiaoLin_Java

Java 数组 1月月更

开源走向世界(下):从数据库技术演进看开源力量丨BDTC 2021

PingCAP

Amazon EC2 串行控制台——化繁为简,高效解决网络问题

亚马逊云科技 (Amazon Web Services)

网络

JavaScript 12种设计模式汇总

编程江湖

JavaScript

读《底层逻辑》

wood

300天创作

react源码解析20.总结&第一章的面试题解答

buchila11

React

Kafka的生产集群部署

编程江湖

kafka

AWS Command Line Interface 使用S3入门

阿呆

AWS S3

如何提高后台服务应用问题的排查效率?日志 VS 远程调试

汪子熙

node.js 后台开发 1月月更

1月月更|推荐学Java——第一个MyBatis程序

逆锋起笔

Java mybatis SSM框架 MyBatis标签 mybatis配置

使用亚马逊云科技安全服务防御、检测和响应 Log4j 漏洞

亚马逊云科技 (Amazon Web Services)

网络

如何突破职业瓶颈

FunTester

Go 性能测试 测试框架 FunTester 职业瓶颈

站在面试官角度,看求职与内卷

程序人生

为什么要把系统拆分成分布式的?为啥要用dubbo?

JavaEdge

1月月更

大咖眼中的AI开源 | 张建:图神经网络和DGL的实际应用

亚马逊云科技 (Amazon Web Services)

网络

一个基于PoS共识算法的区块链实例解析(升级版)

恒生LIGHT云社区

区块链 共识算法 PoS

TCP socket和web socket的区别

汪子熙

前端 node,js 1月月更

大咖眼中的AI开源|王敏捷:深图在人工智能中的探索和研究

亚马逊云科技 (Amazon Web Services)

网络

Magic UI四子围城,2022折叠屏灵魂觉醒

脑极体

用复杂的方式学会数组(Python实现动态数组)

宇宙之一粟

Python 数据结构 数组 1月月更

如何优雅的遍历Mycat分库表

编程江湖

mycat

模块六作业

Geek_e6f7f6

架构训练营

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