写点什么

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

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

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

关注

评论

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

AngularJS进阶(二十四)AngularJS与单选框及多选框的双向动态绑定

No Silver Bullet

AngularJS 12月月更 单选 多选

极客时间 - 运维进阶训练营 - 第六周作业

dog_brother

CDH+Kylin三部曲之一:准备工作

程序员欣宸

大数据 kylin 12月月更

MetaTown:一个可以自己构建数字资产的平台

华为云开发者联盟

区块链 华为云 12 月 PK 榜 数字资产平台

底层逻辑-理解Go语言的本质

面向加薪学习

golang go语言 源代码 golang 面试 Go源代码

火山引擎DataTester:一个爆款游戏产品,是如何用A/B测试打磨出来的?

字节跳动数据平台

大数据 游戏 AB testing实战 12 月 PK 榜

【愚公系列】2022年12月 微信小程序-组件模板和组件样式

愚公搬代码

12月月更

极客时间架构训练营作业-模块一

张建闯

架构实战营

足球比赛中的数据科学

CnosDB

数据库 时序数据库 开源社区 CnosDB infra

Python:灵活的开发环境

eng八戒

Python Python自动化办公

工作中常用的设计模式--策略模式

lpe234

Java 后端 设计模式 策略模式 spring-boot

TDengine3.0:解决高基数问题的时序数据库设计思路

TDengine

数据库 tdengine 时序数据库

2022-12-04:给定一个由 ‘[‘ ,‘]‘,‘(‘,‘)’ 组成的字符串, 请问最少插入多少个括号就能使这个字符串的所有括号左右配对, 例如当前串是 “([[])“,那么插入一个‘]‘即可满足

福大大架构师每日一题

算法 rust 福大大

架构训练营模块1作业

附加信息

架构训练营

踩坑之旅:配置 ROS 环境

eng八戒

机器人 ROS 移动机器人 机器人开发

鸿蒙开发实例 | 可复用列表项的ListContainer

TiAmo

华为 华为云 12月月更

4.如何做好架构设计

程序员小张

「架构实战营」

理解DALL·E 2, Stable Diffusion和 Midjourney的工作原理

Baihai IDP

人工智能 AI 工具 AIGC 文转图

架构实战营 1-5 学生管理系统实战随堂测验

西山薄凉

「架构实战营」

架构实战营 1-6 学生管理云平台实战随堂测验

西山薄凉

「架构实战营」

AngularJS进阶(二十二)实现时间选择插件

No Silver Bullet

AngularJS 12月月更 AngularJS时间插件

架构实战营 - 微信业务架构图 & “学生管理系统”毕设架构设计

huiwen

架构实战营

会议报道 | 第二届百家医院单细胞中心联盟年度峰会圆满落幕

联营汇聚

浅谈 Apache Flume 数据接入的实现原理以及问题分析处理方式

移动云大数据

flume

bat脚本常用命令及测试

@下一站

软件开发 BAT 12月日更 12月月更

编码开发如何开展API安全实现

穿过生命散发芬芳

12月月更

mysql优化之 performance Schema常用查询sql

@下一站

MySQL 优化 12月日更 12月月更

企业如何应对开源软件供应链安全问题?

安势信息

开源 开源安全 软件供应链安全 开源安全与治理 清源CleanSource SCA

AngularJS进阶(二十五)requirejs + angular + angular-route 浅谈HTML5单页面架构

No Silver Bullet

AngularJS 12月月更 requirejs angular-route

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