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

组件设计原则之概念篇(一) 阅读详情

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

本文对应原书第20章前半部分

包的内聚性原则

重用发布等价原则(REP - The Reuse/Release Equivalence Principle)

重用的粒度就是发布的粒度

REP指出,一个包的重用粒度可以和发布粒度一样大。我们所重用的任何东西都必须同时被发布和跟踪。简单的编写一个类,然后声称它是可重用的做法是不现实的。只有在建立一个跟踪系统,为潜在的使用者提供所需要的变更通知、安全性以及支持后,重用才有可能。

REP带给我们了关于如何把设计划分到包中的第一个提示。由于重用性必须是基于包的,所以可重用的包必须包含可重用的类。因此,至少,某些包应该由一组可重用的类组成。

共同重用原则(CRP - The Common Reuse Principle )

一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。

这个原则可以帮助我们决定哪些类应该放进同一个包中。它规定了趋向于共同重用的类应该属于同一个包。

类很少被孤立的重用。一般来说,可重用的类需要与作为该可重用抽象一部分的其它类协作。CRP规定了这些类应该属于同一个包。在这样的一个包中,我们会看到类之间有很多的相互依赖。

CRP告诉我们更多的是,什么类不应该放在一起。CRP规定相互之间没有紧密联系的类不应该在同一个包中。

共同封闭原则(CCP - The Common Closure Principle )

包中的所有 类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。

这是单一责任原则对于包的重新规定。正如SRP规定的一个类不应该包含多个引起变化的原因那样,这条原则规定了一个包不应该包含多个引起变化的原因。

CCP鼓励我们把可能由于同样的原因而更改的所有类共同聚集在同一个地方。如果两个类之间有非常紧密的绑定关系,不管是物理上的还是概念上的,那么它们总是会一同进行变化,因而它们应该属于同一个包中。这样做会减少软件的发布、重新验证、重新发行的工作量。

这个原则和开放封闭原则密切相关。本原则中 “封闭”这个词和OCP中的具有同样的含意。CCP通过把对于一些确定的变化类型开发的类共同组织到同一个包中,从而增强了上述内容。因而,当需求中的一个变化到来时,那个变化就会很有可能被限制在最小数量的包中。

结论

这3个关于包内聚性的原则揭示了,在选择要共同组织到包中的类时,必须要考虑可重用性与可开发性之间的相反作用力。在这些作用力和应用的需求之间进行平衡不是一件简单的工作。此外,这个平衡几乎总是动态的。

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

软件系统架构黄金法则:高内聚低耦合原则 在软件开发领域,我们经常听到“高内聚低耦合”的原则。这是一种设计原则,旨在提高软件系统的可维护性、可扩展性和可重用性。本文将详细介绍高内聚低耦合原则的背景、核心概念、算法原理、最佳实践、实际应用场景、工具和资源推荐以及未来发展趋势和挑战。 1. 背景介绍 1.1 软件系统架构的重要性 阅读详情

相关推荐

java设计模式1,单一职责原则

单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。

学Java,找哪吒 5279

模块化设计原则

告诉我们:稳定模块应该比具体模块更抽象,以提供更大的灵活性,而不稳定模块应该比抽象模块更具体,以便于代码的变更。虽然稳定模块可以非常抽象以允许灵活性,但一个完全抽象的模块是无用的,因为它没有实际的逻辑可以重用。这是通常需要一个包含完全具体定义的模块作为实现,例如 Android 的组件化架构中,经常有单独的 interface 层作为前天模块的公共依赖,提供模块间通信。我们可以用。

chuyouyinghe的专栏 2137

ThingsBoard - 设备接入

设备接入笔记

qq_53839898的博客 1455

包的内聚性三原则、包的耦合性原则

一、包的内聚性三原则: 原则用途:用来指导软件开发者如何将类合理的划分到相应的包中。 前提条件:我们已经设计好了一些类,并且它们之间的相互关系也基本明确。由此可见,类的设计先于包的设计,实际开发中我们确实是采用“自底向上”的方式设计和规划包的。 (1)重用发布等价原则 REP(Reuse-Release Equivalence Principles) 任何一个开发者都知道,我们对源代码的重用必须是基于包的,如果那个人说某个单独的类可以重用,那完全是外行人说的。 可重用的包必须包含可重用的类。 (2

qq_32806781的博客 1753

skywalking各项指标说明

skywalking各项指标说明

没有简介 2488

如何利用VS2017创建一个简单的窗口

#如何利用VS2017创建一个简单的窗口 1、新建->Windows桌面向导 2、应用程序类型->桌面应用程序,点击确定 3、点击调试->开始调试 可建立如下图的窗口 4、可以在生成的项目文件的中找到windows17_2的应用程序,打开界面如下: 注:新建空白项目也可以,注意在解决方案资源器中添加.cpp文件,如源.cpp文件,下载代码见博文 ...

weixin_46894139的博客 2914

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

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

feifeilb的博客 2377

UE5与Cesium for Unreal结合:打造高效离线地图解决方案

本文详细介绍了如何利用UE5与Cesium for Unreal结合打造高效离线地图解决方案,特别适用于数字孪生、军事仿真等网络不稳定场景。通过优化配置、数据处理和性能调优,实现TB级地形数据的流畅渲染,并结合实战案例展示了在油田巡检等复杂环境中的应用效果。

weixin_29007135的博客 493

敏捷软件开发:原则、模式和实践

1,敏捷宣言和原则 1.1 敏捷宣言 敏捷联盟在敏捷大会上发布了他们最主要的主张,称之为敏捷宣言。其主要表述如下: 1,个人和交互胜过过程与工具 2,可以工作的软件胜过面面俱到的文档 3,客户合作胜过合同谈判 4,响应变化胜过遵循计划 虽然后者在软件开发中也具有其价值,但敏捷联盟认为,前者比后者更具有价值。这四点构成了敏捷最核心的要素,但我个人认为就这4点而言,最根本的还是“个人和交

Roy的IT笔记 3853

STM32+A4988控制步进电机

基于A4988芯片驱动42步进电机,在STM32F1上进行测试,最高可以实现16细分。

个人博客 4万+

告别手绘!用Aseprite+Unity Tilemap,从AI生成到2D游戏地图的保姆级搭建流程

本文详细介绍了如何利用Aseprite和Unity Tilemap从AI生成素材到搭建2D游戏地图的完整流程。涵盖AI生成素材的预处理、图层管理、动画制作,以及Unity中的Tilemap系统配置和性能优化技巧,帮助开发者高效创建像素风游戏地图。

weixin_29015483的博客 584

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

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

weixin_30855761的博客 666

「UG/NX」BlockUI 控件集合目录大纲

Block UI Styler 模块设计对话框是官方推荐使用的对话框制作方法,它能够与NX自身风格相统一,在实际开发中经常使用。文字内容包含:NX所有控件介绍的链接、内部控件调用的基础介绍、官方案例查看路径、控件的特殊用法篇链接、番外篇链接。

何曾参静谧的博客 2676

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

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

mac终端命令小入门 421

[RK3568 Android11] 开发之调试RK809 codec音频-SPK喇叭

目录 前言 一、注册声卡顺序 二、SPK喇叭路由配置 三、tinyalsa调试工具 前言 瑞芯微RK809是一种复杂的功率管理集成电路(PMIC)集成编解码器,适用于由外部电源供电的多核系统应用;同时它也集成了音频编解码器,这样在硬件设计上可以直接使用RK809 codec功能,不必再外挂个其他codec芯片;RK809 codec不仅支持SPK,还支持耳机,MIC功能; 一、注册声卡顺序 设备树dts里面原厂帮我们配置好了rk809_sound,我们直接...

~未来可期~ 7414

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

敏捷软件开发:原则、模式与实践的学习笔记

第四部分   打包薪水支付案例20.包的设计原则 通常以包的形式,对应用程序从高层次进行组织。这里从两个方面考虑:一方面是根据什么指导原则把类划分到包中,另一方面是怎么处理包之间的相互关系。 包的粒度:包的内聚性原则。根据自底向上的观点对类进行划分。CRP是共同重用原则,告诉我们更多的是,什么类不应该放到一起。SRP->CCP,一个包不应该包含多个变化的原因。 

lindan1984的专栏 1975

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

《敏捷软件开发 ——原则、模式、与实践》学习笔记(2)

<!-- /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso

春水碧于天,画船听雨眠 870

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

从坏味道到设计原则,构建灵活可维护的软件系统(《敏捷软件开发:原则、模式与实践》读书笔记)

1 单一职责原则 代码复杂性增加、难以复用、高耦合性、测试困难 提高可维护性、增强可复用性、降低耦合性、简化测试 增加类的数量、初始设计复杂性、管理和组织难度、潜在的性能开销。3 Liskov替换原则 程序不稳定、难以维护、降低复用性 提高代码的灵活性和复用性、增强系统的稳定性、简化代码维护 设计复杂性增加、可能需要更多的抽象、初始开发成本增加。5 接口隔离原则 臃肿的接口、难以维护、降低灵活性 提高灵活性、增强可维护性、提高代码的可理解性 增加设计复杂性、初始开发成本增加、可能的代码冗余。

weixin_55010563的博客 496

《敏捷软件开发》读书笔记(2)

《敏捷软件开发》读书笔记(2) 包的划分原则和度量方法 以下原则中,前三个有关粒度,关注于如何把类划分在包里,是自底向上的设计,是关于包的内聚性设计,但是要考虑可开发性和可重用性两者的平衡;而后三个有关耦合,关注包之间的关系,关于包的稳定性设计,是自顶向下的设计思考。 重用发布等价原则REP 重用的粒度=发布的粒度,重用的粒度就是发布的粒度,为重用而发布的包中,不应该包含任何不是为重用而设计的类,...

drumdream的博客 419

敏捷技能修炼:敏捷软件开发与设计的最佳实践

《敏捷技能修炼:敏捷软件开发与设计的最佳实践》基本信息原书名:Essential Skills for the Agile Developer:A Guide to Better Programming and Design作者: (美)Alan Shalloway Scott Bain Ken Pugh Amir Kolsky [作译者介绍]译者: 郑立 邹骏 黄灵出版社:机械工业出版社ISBN...

weixin_33951761的博客 169

包的设计原则,读敏捷软件开发 原则、模式和事件总结

这本书中,关于包的设计有几个很有意思的观点,特别进行记录。 包的内聚性原则。所谓内聚性就是一个模块或者类只执行一项功能,并只执行一项功能。但是本书扩展了这个概念,并通过三个原则对内聚性进行检验 1、重用发布等价原则。      包的设计必须以,使用者的角度进行考虑,第一,如

zhangym365的专栏 617

一篇文章搞懂Javascript设计模式六大原则

Robert C. Martin在《敏捷软件开发:原则、模式与实践》中给出的定义是:“一个类应该只有一个引起它变化的原因”。这意味着每个类、模块或函数应该只负责软件的一个特定部分或功能。Bertrand Meyer在1988年的著作《面向对象软件构造》中首次提出:"软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。"这意味着我们应该能够在不修改现有代码的情况下扩展系统的行为。

weixin_52624209的博客 1417

设计模式原则

单一职责原则(Single Responsibility Principle,SRP)又称单一功能原则,由罗伯特·C.马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中提出的。这里的职责是指类变化的原因,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分(There should never be more than one reason for a class to change)。对类来说的,即一个类应该只负责一项职责。

qq_51417143的博客 960

设计模式原则与分类

设计模式原则与分类 文章目录设计模式原则与分类设计模式七大原则设计模式的分类 设计模式七大原则 开闭原则(OCP:Open Close Principle): (百度百科)在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的环境中是特别有价值的,在这种环...

weixin_42809083的博客 251

敏捷开发 SOLID 原则

文章目录单一职责原则(SRP)开放-封闭原则(OCP)Liskov 替换原则(LSP)接口隔离原则(ISP)依赖倒置原则(DIP) 设计中的拙劣设计症状: 僵硬性(Rigidity):很难对系统进行改动,因为每个改动会迫使很多对系统其他部分的其他改动。 脆弱性(Fragility): 对系统的改动会导致系统中和改动地方在概念上无关的许多地方出现问题。 牢固性(Immobility): 很难解开系统的纠结,让其成为在其他系统中重用的组件 粘滞性(Viscosity):做正确的事情比做错误的事情困难 不必要的

Chris_zhangrx的博客 1013
上一篇: 敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(六)接口隔离原则
下一篇: 敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(八)包的耦合性原则
feifeilb
博客等级 码龄22年 22粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值