前端未来的主流技术方向有哪些?腾讯、京东、同城旅行等大厂都是怎么布局的?戳此了解 了解详情
写点什么

SOLID 面向对象规则中的开放-封闭原则受到挑战

2013 年 5 月 08 日

开放-封闭原则(OCP)是面向对象的 SOLID 原则中的一种,该原则最近受到了 Jon Skeet Robert Ashton 的批评。他们认为,与其定义一样,该原则弊大于利。该原则是由 Robert C. Martin 在本世纪初总结出来的,Robert 辩护说,你们应该看一下完整的描述,而不是只看短短的定义。

这场争论是由《 C# in Depth 》的作者 Jon 的一条推特引发的,他质疑说:

“我知道,质疑 __OCP__ 这样的原则近乎于异端邪说,但我从来就没感觉到它有什么意义。”

Robert C. Martin 在一条回复中回顾了 OCP 原始文章给出的定义:

符合开放-封闭原则的模块有两个主要属性:

1. 为扩展而开放。这意味着模块的行为可以扩展。随着应用需求的改变,我们可以让模块表现出新的不同行为,或者满足新应用的需求。

2. 为修改而关闭。这种模块的源代码是不能动的,不允许任何人修改。

Robert 在回复中承认该原则的定义是有点夸大,但他同时宣称整篇文章的解释更为温和,而且他在新写的一篇文章中改进了其定义。

面对 Robert 的回复,Jon 继续争论说,定义和描述还是太过模糊不清,要讲清本质,这类原则必须使用正确的术语仔细定义。相反,他认为 Alistair Cockburn 创造的“防止变异( Protected Variation )”这一类似概念的描述更好一些:

“识别出预计会发生改变的点,围绕这些点来设计稳定的接口。”

Robert Ashton 随后也对开放-封闭原则提出了批评,他认为该原则是导致很多软件过度设计的罪魁祸首。但是他也承认,该原则在有些领域是有意义的,比如设计会反复修改的场景。之后他还谈到了SOLID 原则的其他4 个

查看英文原文 Open-Closed Principle in SOLID Object Orientation Rules Challenged

2013 年 5 月 08 日 09:381517
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 117.3 次阅读, 收获喜欢 26 次。

关注

评论

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

全网最全原理讲解!如何试出一个Android开发者真正的水平?已开源

欢喜学安卓

android 程序员 面试 移动开发

Linux的进程pid编号极限

程序员架构进阶

Linux 进程

架构师训练营 - 第 13周课后作业(1 期)

Pudding

从根上理解高性能、高并发(三):深入操作系统,彻底理解I/O多路复用

JackJiang

网络编程 高并发 高性能 即时通讯

滴普技术荟-云原生基座OpenKube开放容器实践(一):如何理解Linux network namespace ?

滴普科技2048实验室

Linux

架构师训练营 - 大作业二

Pudding

IT2.0:中台构建还应从企业业务实际出发

华为云开发者社区

区块链 分布式 安全 数据 身份安全

云原生2.0时代,华为云DevOps立体运维实践

华为云开发者社区

DevOps 运维 云原生 华为云

花了19998买的学习教程!2021年Android技术下半场在哪?震撼来袭免费下载!

欢喜学安卓

android 程序员 面试 移动开发

架构师训练营 - 大作业一

Pudding

2020 — iOS 面试败北感悟

iOSer

ios iOS Document 大厂面试 iOS面试 底层知识

深圳区块链交易所开发、数字货币交易平台开发

W13902449729

深圳区块链交易所开发 数字货币交易平台开发

这些常用ETL任务调度框架组件,你都知道几个?

会飞的鱼

大数据处理 kettle 海豚调度 调度引擎 调度式分布

Vue 3 组件开发:搭建基于SpreadJS的表格编辑系统(环境搭建)

Geek_Willie

Vue SpreadJS vite

OpenKruise 2021 规划曝光:More than workloads

阿里巴巴云原生

阿里云 开源 容器 云原生 调度器

抽象照进现实

型火🔥

抽象 视觉化

Java并发编程:AQS的公平性

码农架构

Java Java 分布式 java 并发

架构训练营 - 第 13 周课后作业 - 学习总结

Pudding

anyRTC 2020年12月SDK更新

anyRTC开发者

uni-app android 音视频 WebRTC sdk

细节拉满!美团首推“百万级”Redis进阶笔记究竟有什么魅力

程序员小毕

数据库 nosql redis 分布式 性能

万字长文聊缓存(下)- 应用级缓存

Silently9527

缓存 缓存击穿 Caffeine 缓存架构

四年三次获奖,PostgreSQL再度荣获“年度数据库”桂冠!

PostgreSQLChina

数据库 postgresql 开源

如果腾讯、阿里是弱生态,那么谁是强生态?

ToB行业头条

案例展示自定义C函数的实现过程

华为云开发者社区

数据库 数据 C语言 字符串

计算机专业必看!难道Android真的凉了?大厂内部资料

欢喜学安卓

android 程序员 面试 移动开发

测开之函数进阶· 第7篇《装饰器装饰类,通用装饰器,有啥区别呢?》

清菡

测试

分布式身份:重新定义你的“身份”管理

华为云开发者社区

区块链 数据 隐私保护 分布式身份标识

架构训练营 - 第12周课后作业 - 学习总结

Pudding

Appium的安装及简单的使用介绍

行者AI

人工智能

如何防止短信验证码接口被恶意调用攻击?

香芋味的猫丶

短信 短信防刷 接口安全 验证码

软件测试--中间件介绍

测试人生路

软件测试 中间件

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

SOLID面向对象规则中的开放-封闭原则受到挑战-InfoQ