敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(三)开放-封闭原则

Java工资单:敏捷软件开发原则与实践的案例研究 敏捷开发是一套适应不断变化需求的软件开发方法论。它倡导跨功能团队的协作、客户合作、以及在开发周期中频繁地交付产品增量。敏捷宣言中提出的价值观和原则为软件开发提供了指导。敏捷宣言:1. 个体和互动高于流程和工具2. 可工作的软件高于详尽的文档3. 客户合作高于合同谈判4. 响应变化高于遵循计划依赖倒置原则(Dependency Inversion Principle, DIP)要求高层模块不应该依赖于低层模块,两者都应该依赖于抽象。具体来说,这意味着系统的设计应遵循依赖抽象,不依赖具体实现。 阅读详情

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。

本文对应原书第9章。

开放-封闭原则 (OCP - The Open/Closed Principle)

软件实体(类、模块、函数等等)应该是可以扩展的,但是不能修改的。
对于扩展是开放的。对于更改是封闭的。

关键是抽象

一般而言,无论模块是多么的“封闭”,都会存在一些无法对之封闭的变化。没有对于所有的情况都贴切的模型。既然不可能完全封闭,那么就必须有策略的对待这个问题。也就是说,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离这些变化。

我们如何知道哪个变化有可能发生呢?我们进行适当的调查,提出正确的问题,并且使用我们的经验和一般常识。最终,我们会一直等到变化发生时才采取行动。

  • 只受一次愚弄
    为了防止软件背负不必要的复杂,我们会允许自己被愚弄一次。这意味着我们最初编写代码时,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发生的同类变化。简而言之,我们愿意被第一颗子弹击中,然后我们会确保自己不再被同一只枪发射的其他任何子弹击中。

  • 刺激变化
    如果我们决定接受第一颗子弹,那么子弹到来的越早、越快就对我们越有利。我们希望在开发工作展开不久就知道可能发生的变化。查明可能发生的变化所等待的时间越长,要创建正确的抽象就越困难。因此,我们需要去刺激变化。我们已在前面介绍过一些方法来完成这项工作。

    • 我们首先编写测试。
    • 我们使用很短的迭代周期进行开发
    • 我们在加入基础结构前就可发特性,并且经常性地把那些特性展示给涉众。
    • 我们首先开发最重要的特性。
    • 尽早地、经常性地发布软件。

结论

在许多方面,OCP都是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处(也就是,灵活性、可重用性以及可维护性)。然而,并不是说只要使用一种面向对象语言就是遵循了这个原则。对于应用程序中的每个部分都肆意地进行抽象同样不是一个好主意。正确的做法是,开发人员应该仅仅对程序中呈现出频繁变化的那些部分做出抽象。拒绝不成熟的抽象和抽象本身一样重要。

完整内容请查看敏捷软件开发 - 原则、模式与实践系列

使用 Python 爬虫获取中国证券市场公司公告数据 本文详细介绍了如何使用 Python 爬虫技术从中国证券市场(如巨潮资讯网)爬取公司公告数据。通过分析网页结构,编写爬虫脚本,抓取并存储公告信息,我们实现了从网页抓取数据的全过程。此外,本文还展示了如何应对反爬虫机制,并介绍了数据分析与可视化的基本方法。未来,我们可以通过机器学习等技术进一步挖掘公告中的潜在信息,例如,通过情感分析对公告内容进行情绪分类,或者预测某些公告类型对股市走势的影响等。希望本文能帮助你理解如何使用 Python 爬虫技术获取和处理证券市场的数据,并为你的数据分析项目提供帮助。 阅读详情

相关推荐

HDMI设计2----EDID and E-EDID

1,EDID是什么?有什么用? 图1 应用场景 如图1所示的应用场景,PC将视频信号发送 到我们的设备上,经过一系列的传输和切换,设备将视频信号发送到显示器或者投影机上,也就是说,我们的设备位于PC和显示器之间。首先,在输入端,设备需要让PC知道自己是能够接受输入视频信号的,让PC认为自己是一台显示器。如果不这样做的话,PC可能会拒绝输出任何视频信号的(VGA接口不需要EDID也能输出)。除此之外,设备还要告诉PC自己支持的显示时序。而在输出端,当设备需要自建输出时序而不是简单的复制...

Archar_Saber的博客 7990

深入函数式编程:实践与应用常见设计模式

函数式编程的思想在JavaScript社区中得到了越来越多的关注和应用。尽管它强调纯函数、不可变性和无副作用,与传统的面向对象设计模式有所不同,但我们会发现很多传统设计模式的概念在函数式编程中同样具有实际应用的价值。在本文中,我们将深入研究函数式编程中常用的8个设计模式,并通过实例演示它们在实际应用中的深层次实践。通过这些深入实践的例子,我们更全面地理解了函数式编程中常见设计模式的应用。这些模式的深层次实践展示了如何在实际项目中灵活应用函数式编程的思想,创造出更为清晰、可维护且高度抽象的代码。

xkl_123的博客 1746

EPSON RX8010SJ RTC实战:I2C寄存器配置避坑指南(附完整初始化代码)

本文详细解析了EPSON RX8010SJ RTC芯片在I2C寄存器配置中的常见问题与解决方案,包括TEST位、STOP位和中断控制等关键配置要点。通过实战经验分享和完整的初始化代码模板,帮助开发者避免常见陷阱,确保RTC模块的稳定运行。

weixin_28678831的博客 407

函数式编程的理解

这些示例展示了函数式编程在Python、JavaScript和Java中的一些特性和用法,包括高阶函数、纯函数、不可变性和延迟计算。

ydl1128的博客 1472

如何优化Silvaco二极管仿真网格?这些参数设置技巧让你的结果更精确

本文详细介绍了如何优化Silvaco二极管仿真网格,通过精细调整网格参数提升仿真精度。重点解析了网格密度与计算精度的权衡、关键区域识别与网格强化策略,以及掺杂分布与网格适配技术,帮助工程师在半导体器件仿真中获得更准确的结果。

t8u9v0w1x的博客 660

用ESP32-S3+OV2640摄像头+ILI9488屏,DIY一个能联网的智能猫眼(附完整代码)

本文详细介绍了如何利用ESP32-S3微控制器搭配OV2640摄像头和ILI9488显示屏,DIY一个功能强大的智能猫眼系统。从硬件选型、电路设计到软件开发,提供了完整的解决方案和优化技巧,包括图像采集显示、WiFi远程访问及低功耗设计,适合智能家居爱好者动手实践。

weixin_30897233的博客 501

大模型时代的程序设计·构建未来软件的蓝图 | 好书推荐

在人工智能和机器学习主导的大模型时代背景下,设计模式的知识对于软件开发从业者来说变得尤为重要。这些模式作为构建灵活、可扩展系统的基石,在新兴技术快速发展的环境下,帮助开发者应对挑战。以下书单涵盖了设计模式的经典原则及其在现代技术中的应用,旨在为软件工程师、系统架构师等专业人员提供与时俱进的参考,帮助他们适应技术革新的浪潮。小编推荐这个关于设计模式的书单,希望可以帮助从业者更好地理解其在现代技术环境中的实际应用,从而在激烈的竞争中获得优势。《设计模式:可复用面向对象软件的基础》(典藏版)

mama19971023的博客 834

NWD 格式转换 STL 全流程:专业方案与迪威模型网在线转换详解

在3D模型处理中,将NWD文件转换为STL格式是常见的需求,特别是在3D打印和计算机辅助制造等领域。NWD文件由Autodesk开发,主要用于建筑、工程和施工行业,包含丰富的几何图形和材质信息,但因其专有格式和大文件大小,限制了其应用范围。相比之下,STL格式广泛应用于3D打印,仅包含表面几何信息。转换NWD到STL的原因包括拓展模型应用场景和便于模型编辑。转换方法包括使用专业软件如Autodesk Navisworks配合Blender或3ds Max,或使用专门的转换工具如CADExchanger。

技术说明博主 2540

【Go工程化实践】:为什么顶尖团队都用这6种函数设计模式?

掌握Go函数最佳实践,提升代码可维护性与团队协作效率。本文详解6种高频率使用的函数设计模式,涵盖错误处理、接口抽象与依赖注入等场景,揭示顶尖团队的工程化方法。实用技巧值得收藏。

PixelStream的博客 940

大模型之Spring AI实战系列(一):基础认知篇 - 开启智能应用开发之旅

Spring AI 是一个轻量级开源框架,旨在简化 AI 模型在企业级 Java 应用中的集成与管理。它提供了跨多个 AI 服务提供商的便携式 API,支持聊天、文本转图像、嵌入式模型等多种功能,并兼容主流的 AI 模型提供商如 OpenAI、Google 等。Spring AI 的核心功能包括结构化输出、向量数据库支持、工具/函数调用、可观察性、文档摄取 ETL 框架、AI 模型评估等。

寻道AI,探索AI无限可能! 6367

Oracle EBS AP发票被预付款核算创建会计科目时间超长

在客户职能部门的水电、通信和物业等费用统一管理或对接部门报销时,用户将所有费用分摊到各个末级部门,导致AP发票行数高达上千行。这引发了以下问题:1)用户过账时,创建会计科目的请求执行超过20小时未完成,只能手动取消;2)取消请求后,系统一直处于回滚状态;3)通过SQL脚本分析,发现预付发票核销分配行表记录数量庞大,单笔AP发票记录高达90多万条,类似发票共有5笔。

陈显平的专栏-Oracle EBS 352

函数式编程:探索高效、灵活的编程范式

通过深入学习和应用函数式编程的原则和技术,开发人员可以提高代码的可靠性、可扩展性和可测试性,从而更高效地构建复杂的应用程序。函数式编程是一种强大、灵活且受欢迎的编程范式,它的核心思想是将计算过程看作是函数之间的转化。函数式编程强调使用纯函数、避免共享状态和可变数据,以及利用高阶函数和lambda表达式等概念来实现代码的简洁和可复用性。通过函数的组合和变换,可以处理事件流和异步操作,实现响应式的数据流和交互。由于纯函数和不可变性的特性,函数之间的依赖关系更清晰,代码的逻辑更易于理解和调试。

鑫和皓的博客 280

RK3568适配MIPI屏幕触摸,触摸延时很大

我用的是系统,接了一个,设备树已经正确配置,evtest测试坐标值和触摸位置都是准确的。但是出现了一个:我在屏幕上点一下,要等大约 2 秒才能在evtest里看到坐标事件打印。这种现象在 Goodix 系列触摸驱动里比较少见,一般意味着。

小灰灰的博客 1363

敏捷软件开发 - 原则、模式与实践

起源 《敏捷软件开发 - 原则、模式与实践》是我接触到的第一本系统介绍软件设计的书籍,深刻影响了个人的软件开发习惯。它并不难懂,我一直推荐给身边的各个层次的程序员学习。 可对于一本接近500页的图书,很多人还是望而却步。一直都想写个关于这本书的速读,使更多的人了解它。但是最近又重新学习了一遍发现它之所以有价值不仅仅在于书中总结的原则和模式,更在于它提供的如何运用这些原则、模式的实践例子。忽略了大量...

feifeilb的博客 2377

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

敏捷软件开发——开放封闭原则OCP

敏捷软件开发——开放封闭原则OCP 首先,让我们分析一下背景。什么是软件开发过程中最不稳定的因素?——答案是需求!需求在软件开发过程中时时刻刻都可能发生变化。那么,如何灵活应对变化是软件结构设计中最重要也是最困难的一个问题。好的设计带来了极大了灵活性,不好的设计则充斥着僵化的臭味。这样,也就引出了本文的主题:【开发封闭原则】。       下面,就来简单扼要的介绍一下什么是【开放封

2432

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

敏捷开发笔记(第9章节)--开放-封闭原则(OCP)

​Ivar Jacobson曾说过,“任何系统在其生命周期中都会发生变化。如果我们期望开发出的系统不会再第一版后就被抛弃你就必须牢牢记住一点”。Bertrand Meyer在1988年提出著名的开发-封闭原则(The Open - closed Principle,简称OCP)为我们提供了指引。

stupid的博客 2464

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《敏捷软件开发──原则、模式与实践》阅读笔记

《敏捷软件开发──原则、模式与实践》阅读笔记 《敏捷软件开发──原则、模式与实践》阅读笔记 Table of Contents 1. 敏捷开发 1.1. 敏捷联盟宣言 1.2. 敏捷开发的原则 2. 极限编程 3. 设计原则 3.1. 单一职责原则(SRP) 3.2. 开放——封闭原则(OCR) 3.2.1. 遵循开放──封闭原则设...

weixin_30855761的博客 666

敏捷软件开发:原则、模式与实践 第七至九章读书笔记

第七章 敏捷设计 拙劣设计的症状定义: 僵化性(Rigidity): 设计难以改变 对软件进行一个单一改动,却引发一系列有依赖关系模块的连锁改动 脆弱性(Fragility): 设计易于遭到破坏 对软件进行单一改动时,程序的许多其他地方就会出现问题 牢固性(Immobility): 设计难以重用 设计中包含了对其他系统有用的部分,但是把这部分从系统中分离出来代价和风险很大 粘滞性( Viscos...

文森猫的记录 614

《敏捷软件开发:原则、模式与实践》读书笔记

1、敏捷软件开发宣言 个体和交互         胜过 过程和工具 可以工作的软件     胜过 面面俱到的文档 客户合作           胜过 合同谈判 响应变化           胜过 遵循计划 2、面相对象设计的原则 单一职责原则 开放-封闭原则 Liskov替换原则 替换原则 依赖倒置原则 接口隔离原则 重用发布等价原则 共同封闭原则

backard的专栏 2418

软件开发之设计原则和模式

<br /><br />    软件开发是一项高强度的脑力劳动过程,到目前为止尚没有办法使软件开发完全机械化,只能靠人脑去设计,也无法保证一个软件完全没有错误。同硬件产品相比,一方面是同功能的软件产品不再需要一个生产过程,只需要拷贝就行了,而硬件产品却需要重复生产;另一方面,软件产品功能需求的变化远比硬件产品多。这就造成软件产品和硬件产品在成型之后面临的问题是不同的,软件产品主要是应付用户功能需求的变化和扩展,硬件产品主要着眼于如何大规模地生产。硬件产品的大规模生产可以交给机器去执行,而软件产品的需求变化还

anguangqing的专栏 5293

敏捷软件开发之敏捷设计原则

第七章 什么是设计模式 1. 源代码是软件系统的主要设计文档 我们不应该认为软件设计就是一组和代码分离的UML图,UML图只是描述了设计的一部分。 软件项目的设计是一个抽像的概念。它和程序的概括形状、结构以及每一个模块、类和方法的详细形状和结构有关。 设计的最终体现在 源代码 中。 2.设计中臭味——腐化软件的气味 僵化性: 耦合性高,模块组件件关系太紧密,依赖性高,一动全动。 脆弱性: 改...

mac终端命令小入门 421

敏捷软件开发总结——开放-封闭原则(OCP)

开放-封闭原则(OCP)的意义 任何系统在其生命周期中都会发生变化,那么怎样的设计才能面对需求变化而保持相对稳定?著名的开放-封闭原则(OCP)为我们提供了指引。 如果程序中的一处改动就会造成连锁反应,导致一系列相关模块改动,那么设计就具有僵化性。OCP建议我们对此重构,这样以后改动就只需要添加新的代码,而不必修改已经正常运行的代码。 关键是抽象 策略(Strategy)模式和模板方法(Templ...

take it easy 644

敏捷软件开发原则,模式与实践书摘

敏捷软件开发原则,模式与实践书摘。 拙劣设计的症状: 僵化性(Rigidity):很难对系统进行改动,因为每个改动都会迫使许多对系统其它部分的其它改动脆弱性(Fragility):对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题牢固性(Immobility):很难解开系统的纠结,使之成为一些可在其他系统中重用的组件粘滞性(Viscosity):做正确的事情比做错误的事情要

CPP_CHEN的专栏 1856

敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(七)包的内聚性原则

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。 本文对应原书第20章前半部分 包的内聚性原则 重用发布等价原则(REP - The Reuse/Release Equivalence Principle) 重用的粒度就是发布的粒度 REP指出,一个包的重用粒度可以和发布粒度一样大。我们所重用的任何东西都必须同时被发布和跟踪。简单的编写一个类,然后声称它是可重用的做法是不现实的。只有在建立一...

feifeilb的博客 456

《敏捷软件开发》学习笔记:敏捷设计原则

遵循敏捷实践去发现问题;应用设计原则去诊断问题;应用适当的设计模式去解决问题。 软件开发这三个方面件的相互作用就是设计。

七月南风 1027

推荐:《敏捷软件开发、原则、模式与实践》电子版

 内容简介 在这本书中,享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您展示如何解决软件开发人员、项目经理及软件项目领导们所面临的最棘手的问题。这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。   ·讲述在预算和实践要求下,软件开发人员和项目经理如何使用敏捷开发完成项目。   ·使用真实案例讲解如何用极限编程来设计、测试、重构和结

Scrum中文网-博客 1318
上一篇: 敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(二)单一责任原则
下一篇: 敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(四)里氏替换原则
feifeilb
博客等级 码龄22年 22粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值