HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

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

关注

评论

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

【高并发】ThreadLocal学会了这些,你也能和面试官扯皮了!

冰河

并发编程 多线程 协程 异步编程 精通高并发系列

【刷题第一天】蜡烛之间的盘子

白日梦

5月月更

Java 基础语法

源字节1号

软件开发 前端开发 Java后端 小程序开发

如何将知识管理应用到工作中,解决企业的问题?

小炮

一文带你了解 「图数据库」Nebula 的存储设计和思考

NebulaGraph

数据存储 图数据库

STM32+华为云IOT设计的动态密码锁

DS小龙哥

5月月更

五年谷歌ML Infra生涯,我学到最重要的3个教训

OneFlow

机器学习 深度学习 深度学习框架 MLOps Data Infra

千人千面工作台,轻松定制你的移动业务场景

WorkPlus

养殖场新来了个“AI管家”

华为云开发者联盟

hilens ModelArts Pro 养殖场 AI摄像头 天视通

IDC Panel:智能运维在金融行业中的场景化应用

BizSeer必示科技

轻量迅捷时代,Vite 与Webpack 谁赢谁输

葡萄城技术团队

前端 vite webpack 轮子

安全领导力| GitLab 持续位列 Gartner AST 魔力象限

极狐GitLab

安全

数据大屏,仅仅是数据展示吗?

葡萄城技术团队

数据分析 BI 数据可视化 数据大屏 BI分析

Docker下的Spring Cloud三部曲之二:细说Spring Cloud开发

程序员欣宸

Java spring-cloud 5月月更

七、高可用之故障演练

穿过生命散发芬芳

故障演练 5月月更 高可用设计

CRMEB Java.小程序交易组件操作使用教程

CRMEB

福昕软件:用PDF辅助技术弥合阅读障碍者的数字鸿沟

联营汇聚

Java并发机制的底层实现原理

急需上岸的小谢

5月月更

限时免费!六位袋鼠云数栈资深产品专家带来《数智赋能实战六讲》,欢迎报名

袋鼠云数栈

数据中台 大数据 开源

导航网站合集 | 你想要的资源它都有

小炮

面试中被问到最多的 19 个 JavaScript 问题

海拥(haiyong.site)

JavaScript 5月月更

python处理excel文件,python xlsxwriter 一文初掌握

梦想橡皮擦

5月月更

官宣|Apache Flink 1.15 发布公告

Apache Flink

大数据 flink 编程 流计算 实时计算

火山引擎推出基于全新视角的 Web 端性能监控方案

字节跳动终端技术

字节跳动 Web 性能监控 火山引擎

面试突击45:为什么要用读写锁?它有什么优点?

王磊

Java 面试

BI系统打包Docker镜像及容器化部署的具体实现

葡萄城技术团队

Docker 数据分析 BI BI 分析工具

OceanBase 源码解读(十):一号表及其服务寻址

OceanBase 数据库

oceanbase 源码解读

ChunJun支持异构数据源DDL转换与自动执行 丨DTMO 02期回顾(内含课程回放+课件)

袋鼠云数栈

大数据

超级全面的设计类网址导航

小炮

web前端培训项目的 Vite 迁移实践分析

@零度

前端开发 vite

[Day38]-[二叉树]-二叉树的右视图

方勇(gopher)

LeetCode 二叉树 数据结构算法

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