Agile Software Development Principles, Patterns,and Practices 第7-9章读书笔记

软件项目的设计是一个抽象的概念。它和程序的概括形状,结构以及每一个模块,类和方案的详细形状和结构有关。可以使用很多不同的媒介去描绘它,但是它最终提现为源代码。最后,源代码就是设计。

系统的设计是存在于你头脑中的一副至关重要的图像。

第七章 什么是敏捷设计

设计中的臭味:

  • 僵化性:很难对系统进行改动,因为每一个改动都会迫使许多对系统其它部分的其它改动。
  • 脆弱性:对系统的改动会导致系统中与改动的地方在概念上无关的许多地方出现问题。
  • 牢固性:很难解开系统的模块,分离开对其它系统有用的部分所需的努力和风险是巨大的。
  • 粘滞性:实现需求,用保持系统设计的方法比推倒系统设计方法(重新设计)更难应用。
  • 不必要的复杂性:过度设计。
  • 不必要的重复性:系统中有重复性代码,给后续程序的理解和维护带来困难。
  • 晦涩性:系统设计晦涩难懂。不利于阅读和理解系统设计。

什么是敏捷设计:

  1. 敏捷设计是一个过程,不是一个事件。它是一个持续的应用原则,模式以及实践来改进软件的结构和可读性的过程。它致力于保持系统设计在任何实践都尽可能得简单,干净以及富有表现力。

 

第八章 单一职责原则(SRP)

就一个类而言,应该仅有一个引起它变化的原因。

为什么要使用单一职责:

  1. 如果一个类承担了多于一个的职责,那么引起它变化的原因就会有多个。而我们并不想太多变化。
  2. 在SRP中,把职责定义为“变化的原因”。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。

结论:

  1. SRP 是所有原则中最简单的之一,也是最难正确运用的之一。因为我们会自然地吧职责结合在一起。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。

 

第九章 开放-封闭原则(OCP)

软件实体(类,模块,函数等等)应该是可以扩展的,但是不可以修改的。

特征:

  1. “对于扩展是开放的”。这意味着模块的行为是可以扩展的。 当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。换句话说,我们可以改变模块的功能。
  2. “对于更改是封闭的”。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,无论是可链接的库,DLL或者java的.jar文件,都无需改动。

关键:

  1. 开闭原则的关键在于抽象,即只定义行为,不定义具体实现。先占住一个位置,留给具体实现者去实现。

结论:

  1. 在许多方面,OCP都是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处(灵活性,可重用性以及可维护性)。然而,并不是说只要使用一种面向对象语言就是遵循了这个原则。对于应用程序汇总的每个部分都恣意地进行抽象同样不是一个好主意。正确的做法是,开发人员应该仅仅对程序中呈现出频繁变化的那些部分作出抽象。拒绝不成熟的抽象和抽象本身一样重要。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值