硬核干货——《中小企业 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:574801
用户头像

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

关注

评论

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

iPad配置OpenVPN客户端

wong

ipad OpenVPN

原创 | TDD工具集:JUnit、AssertJ和Mockito (二十一)编写测试-测试模板

编程道与术

Java 编程 TDD 单元测试 JUNI

自由是不是随心所欲?

Neco.W

个人成长 自由 控制

Zookeeper-Access Control List(ACL)

CoderLi

Java zookeeper 源码分析 后端

架构师训练营学习总结——框架设计【第二周】

王海

极客大学架构师训练营

面向对象的三个基本特征(要素)

彭阿三

三要素 三个基本特征 封装、继承、多态

Zookeeper 序列化

CoderLi

Java zookeeper 源码分析 后端

华硕灵珑II笔记本电脑——自由work不设限

最新动态

钩陈/ 好中文作业:巴别塔

ZoomQuiet大妈

写作 大妈 是也乎 IMHO 蟒营®

ZooKeeper 数据模型:节点的特性与应用

CoderLi

zookeeper 源码分析 数据模型 节点

2w字长文!手撸一套 Java 基础面试题

苹果看辽宁体育

Java 后端 Java25周年

Java 序列化

CoderLi

Java 程序员 后端 序列化

常用运筹学软件整理

张利东

游戏夜读 | 如何制作游戏?

game1night

架构师训练营作业(第二周)

王海

极客大学架构师训练营

机器学习算法评估指标—2D语义分割

做技术BP的文案Gou

学习 2D 评估标准 语义分割

重学 Java 设计模式:实战外观模式「基于SpringBoot开发门面模式中间件,统一控制接口白名单场景」

小傅哥

设计模式 小傅哥 重构 代码质量 代码坏味道

JAVA 中的 CAS

犀利豆

Java 并发 CAS

中电标协提出并归口:《政务APP评价指标》团体标准开启制订工作

博睿数据

App 标准化 中电标协 政务信息化 博睿宏远

Zookeeper Watcher 流程分析(结合源码)

CoderLi

Java zookeeper 源码分析 后端 Watcher

原创下载 | TDD工具集原创开源代码免费下载!

编程道与术

Java 开源 TDD 下载 代码

如何基于 OAM 编写一个扩展 Trait?

钱王骞

云原生 k8s OAM

下周要开始“卖桃者说”代班计划了

霍太稳@极客邦科技

日常

kubernetes简单入门(多图少字版)

绿星雪碧

Kubernetes 入门

如何让程序员变得没朋友

四猿外

程序员 个人感悟 技术人生 经验分享

2020年5月云主机性能评测报告

博睿数据

云计算 服务器 公有云 机房 云主机

情绪管理 - ABC理论

石云升

情绪控制 ABC理论 费斯汀格法则

知乎Matisse图片库在Android10上拍照,预览问题

三爻

android

副业月赚 10 万的程序员是如何做销售的?

非著名程序员

程序员 独立开发者 程序人生 提升认知

Java | 原来 serialVersionUID 的用处在这里

YoungZY

Java

月薪 3W 的 Apple 微信编辑是这么发文章的 |如何发类似 Apple 微信公众号的文章效果

陈东泽 EuryChen

CSS 微信 大前端 apple 微信公众号

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