QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

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

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

关注

评论

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

区块链技术解决信任问题

CECBC

java拼团小程序源码(毕设)

清风

毕业设计

编程基础:CPU资源监控

正向成长

CPU调度

快速上手Apache POI

卢卡多多

POI Apache POI 9月日更

计算机工业的生态链(三)

姬翔

9月日更

分分合合分分,谷歌医疗走向大败退

脑极体

Python Qt GUI设计:UI界面可视化组件、属性概述(基础篇—4)

不脱发的程序猿

Python qt GUI设计 PyQt5

自定义aop实现Cacheable注解(零拷贝), CacheItemGet,CacheMapGet,CacheMapPut

张音乐

Java 缓存 注解 9月日更

从零到MySQL架构师学习内容整理

hanaper

HTML进阶(二)

Augus

html 9月日更

【网络安全】Spring框架漏洞总结(一)

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

ebay支付账务系统架构解析之“读”一无二

贾奇 (Jacky)

支付系统 CQRS 读写分离

MySQL + Keepalived 双主热备搭建

Se7en

如何从数据到资产

奔向架构师

数据治理 9月日更

Python——内置函数----让你偷懒的工具

在即

9月日更

网卡修改网速和buffer

耳东@Erdong

9月日更 网卡

全球国家简码信息表

入门小站

工具

坍缩的企业

涛哥 数字产品和业务架构

企业架构

大厂敲门砖!P9技术官级别的顶级并发编程宝典,献给想去大厂的你

Java 编程 面试 程序人生 p9

一文说清BIO、NIO、AIO不同IO模型演进之路

慕枫技术笔记

后端 引航计划

GraphQL 快速入门【1】简介

码语者

Rest graphql

MySQL五个常见的高可用方案

hanaper

linux之chattr命令

入门小站

Linux

网络攻防学习笔记 Day132

穿过生命散发芬芳

网络模型 9月日更

测试模型中理解压力测试和负载测试

FunTester

性能测试 接口测试 压力测试 FunTester 负载测试

spine动画文件转dragonbones骨骼文件

风翱

9月日更 dragonbones

KVM虚拟机常用管理命令

玏佾

kvm 虚拟主机

设计模式类型

一个大红包

9月日更

如何PWA构建现代离线应用程序

devpoint

Service Worker 9月日更

简单五步:给你的 Golang 应用加一个 GUI ( Electron 驱动)

baiyutang

UI 跨平台 Go 语言 GUI 9月日更

架构训练营 模块7 - 王者荣耀商城异地多活架构设计

sophiahuxh

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