必威体育betway787-必威app体育

热门关键词: 必威体育betway787,必威app体育

【必威体育betway787】软件开发,简约之美

来源:http://www.sypms.com 作者:必威-国际游戏 人气:196 发布时间:2019-10-28
摘要:3、运行可维护。 运行可维护主要包括运行时的问题定位、运行时服务的动态扩展等。笔者认为目前阻碍软件系统的运行可维护的两个最大障碍是: (1)经常忽视对于可维护性的设计。

必威体育betway787 1

3、运行可维护。

运行可维护主要包括运行时的问题定位、运行时服务的动态扩展等。笔者认为目前阻碍软件系统的运行可维护的两个最大障碍是:

(1)经常忽视对于可维护性的设计。

( 2)复杂的技术架构、流程以及组织结构导致软件系统的维护非常复杂。

很多时候我们在设计系统时,往往会忽略系统的运行可维护性设计,包括各服务的日志、服务的调用链分析、关键服务的实时监控、服务降级、熔断等处理。我们需要设计一个实时监控的运维地图,通过这个运维地图我们可以获知各个服务节点的运行状态、哪些服务需要扩容、哪些服务出现了问题等。

复杂的系统必然导致复杂的运维。运行可维护性的优化,也可以从优化不合理的技术架构、流程以及组织结构入手,试想一个有着复杂的技术架构、流程以及组织结构的系统,它的运维往往也会非常复杂,维护起来就会非常吃力。所以在设计的时候首先应该去试着做减法,对以前设计不合理、复杂的地方进行清理。只有简单的东西才好管理。

2.1 程序员也是设计师

  • 每个写代码的人都是设计师

身为设计师,必须时时愿意聆听建议和反馈,之后,任何决策都必须由单独的个人而不是一群人来做出。
而如果你是资深开发人员或首席程序员,你在推翻下属设计时,应当说明新决策为什么比原来的好。不过即便如此,软件设计的责任也应当落实在真正写代码的人身上。

 

1.第一原则:存在的理由

1、设计可维护。

笔者认为设计的主要工作有两个:(1)定义设计相关的概念;(2)定义概念和概念之间的关系。

当然事物的概念以及概念和概念之间的关系并不是只有一种定义,设计的目的不一样,看事物的角度不一样,对事物的看法也会不一样。因此在设计的时候可以以合适的方式和语言来说明事物的概念以及概念和概念之间的关系。

设计可维护要求设计简洁,设计相关的概念定义明确,并且概念和概念之间的关系清晰。

设计简洁不是说设计简单。凡事应该尽量往简单处想,但是不能过于简单。因为现实世界本来就是一个非常复杂的系统,而软件系统可以认为是现实世界系统在软件领域的投影,如果现实系统非常复杂,其投影也会相应地变得复杂。但是既然是投影,那肯定就会有相对于现实世界“抽象”的部分,如果“抽象”的好,那投影会比现实系统简单很多,所以怎么去抽象很重要,可能决定了软件系统初始复杂度的高低。(另外,现实世界系统的不同形状投影到软件领域时可能是同一个事物,这样就可以做到复用,我们在做软件设计时需要进行这种非常重要的思考)。

4.1 软件设计的方程式

D = (Vn + Vf) / (Ei + Em)
D表示这个变化的合意程度(可取程度,也就是说此项工作值不值得做下去)。
Vn表示当前价值
Vf表示未来价值
Ei表示实现成本
Em表示维护成本
规则:

  1. 理想的解决方案:维护成本降到零
  2. 理想的实际情况:未来收益高于维护成本
  3. 通常来说:相比降低实现成本,降低维护成功更加重要
  • 数据结构的复用

清晰的远见是一个软件项目成功的基础。没有这样的远见,项目开发最后就变成天天为一个不好的设计做补丁。Brooks说过: 概念的完整性是系统设计中最重要的问题。 Stroustrup 也说: 有一个干净的内部结构是构建一个可理解、可辨识、可维护 、可测试系统的基础。 Booch则总结道: 只有当你对系统的体系有一个清晰的感觉,才可能去发现通用的抽象和机制。开发这种通用性最终导致系统更简单,因此更小、更可靠。 如果你不断地复制、粘贴、修改代码,最终你将陷入一个大泥潭(the Big Mud), 你永远不可能对系统有一个清晰的认识。

破窗效应

心理学上有著名的破窗效应,也就是当某间房子的玻璃有一个小洞时,过不了很久,这间房子的所有窗户的玻璃都会被打碎,这个效应告诉人们在现实生活中不要忽视细微的缺陷,因为这个细微的缺陷很容易导致其它细微缺陷的出现,最后这些细微的缺陷作用于复杂系统时可能会演变成重大的事故。

软件系统中也经常是这样,当我们发现软件系统中某个差的设计会腐蚀架构,但没人去修改时,往往很快又会有另一个腐蚀架构的设计会出现,并且这两次差的设计对于架构的腐蚀力比单独一项要大的多,因为差的设计之间会相互作用。对设计的质量会造成大的伤害的一个思维是:每个人都觉得自己这样的做法没有问题,因为其他人也是这么做的。

4.3 不可预测的结果

未来的某些事情,是我们不知道的。
程序员犯的最常见、最严重的错误,就是在其实不知道未来的时候去预测未来。

 

软件设计不是一个轻描淡写的过程。在做任何一个设计时,你必须考虑很多因素。所有设计应当尽可能简单,但是不要再比这简单了。这样产生的系统才是可以理解 和容易维护的。这并不是说很多有意义的特性,因为这种简单性也要被抛弃。确实很多更优雅的设计往往更简单,但简单并不意味着“quick and dirty.”。事实上,简单是通过许多思考和一次一次的反复修改才达到的。这些努力的汇报就是更容易维护,代码错误更少。 (看看是否违反)

有哪些差的可维护设计

说什么是好的可维护设计非常困难,因为受到很多因素的限制和评判,但是什么样的设计维护非常困难,这个倒可以列举几个典型的,笔者给出根本没办法维护的设计的几个典型特征:

(1)各个服务的职责不清晰。

(2)服务之间严重耦合,服务间的关系彼此交错,互相依赖,非常混乱。

(3)服务的设计跟特定的实现耦合太紧,没有进行合理的抽象。

(4)设计中引入太多没有必要的概念,并且概念之间的关系不清晰,导致对于软件设计的理解非常复杂。

那是否避免上述这些典型差的特征,软件的设计可维护性就会很好吗?答案是否定的。人首要的任务不是去努力看清楚远处模糊的东西,而是去做好身边清楚的事情。设计的关键是要结合具体的业务逐渐理清楚什么样的设计是不可维护的,并且在以后的设计中要避免它们,我们需要有一个清单来记录哪些是差的设计方法,在后面做设计时再根据这个清单来进行逐一检查。

第七章 简洁

软件的维护难度,反比于其简洁程度。
要简单到傻子都能懂。
保持一致、命名、注释都需要注意。

  • 代码的复制与粘贴
  • 算法的复用

一个成功的软件有很长的生命期。你必须能够使得软件能够适应这样和那样的变化。所以,一开始就不要将软件设计到死角上去。请总是问一下自己“如果这样,那 么。。?“这个问题,你要考虑到各种各样的可能性,而不光光是图省事。复制,粘贴一下即可。

业务设计和实现设计的可维护

设计可维护分为两个方面:业务设计的可维护和实现设计的可维护。业务设计的可维护是站在客户的角度思考,而实现设计的可维护是站在软件系统实现的角度来思考。

业务设计的目标是为客户带来最大化的价值,所以业务设计修改的前提是修改这个业务可以为客户带来更大的价值,并且这种价值是要站在整个系统的角度去衡量而不是单项业务的角度。业务设计可维护是要去思考当客户所处的商业环境或者内部的运作流程发生变化时,软件系统的业务设计怎么去更好地适应这种变化。

实现设计的可维护则是在业务设计变更的前提下,怎么去保障实现的速度最快、交付的软件版本的质量最高。

第六章 缺陷与设计

在程序中新增缺陷的可能性与代码修改量成正比。 - 改的越多,越可能出Bug
最好的设计,就是能适应外界尽可能多的变化,而软件自身变化尽可能的少。
永远不要“修正”任何东西,除非真的是bug,而且有证据表面问题确实存在。

  • 不要手贱
    避免重复

 

转自:铮鸣科技(一点号)返回搜狐,查看更多

复杂系统

复杂系统Complex systems),是指由许多可能相互作用的组成成分所组成的系统。在很多情况下,将这样的系统表示为网络是有用的,其节点代表组成成分,链接则代表它们的交互作用。

复杂系统里的关系是非线性的实际上,这意味着一个小的扰动可能会产生很大的影响(参见“蝴蝶效应”)、一个比例效应、或甚至根本没有效果。(出自维基百科)

1.2 程序究竟是什么?

要想改进结果,提高代码质量最为关键。
所以我们最需要掌握的是,提高代码质量的科学方法。

如何实现这些系统设计的目标呢?

在采取任何动作之前首先做一个清晰、完整的考虑,这样才能产生更好的结果。如果你考虑了,但还是产生错误的结果,那么这种努力也是值得的。在你学习或研究类似的问题时,将更容易理解和掌握。

性能

说到性能,我们往往关注的是系统运行的速度,而笔者认为系统的性能不仅仅是这个,还需要关注设计、编码等整个软件交付过程的速度。

第二章 缺失的科学

软件设计的科学就是为软件做计划、制定决策的科学,它帮助大家做出这类决定:

  • 程序的代码应当采用什么结构?
  • 程序的速度重要,还是代码容易阅读重要?
  • 为满足需求,应该选择哪种编程语言?

软件系统中任何与架构相关的技术决策,以及在开发系统中所做的技术决策,
都可以归到“软件设计”的范畴里。

 

必威体育betway787 2

软件系统的两个重要概念

第三章 软件设计的推动力

  •   可插入性
      可以很容易地将一个类抽出去,同时将另一个有同样接口的类加入进来。这是“黏度过高”的对立面。
  •   可复用性 

必威体育betway787 3

3、运行速度快

运行速度就是我们通常理解的性能了,它的快慢也很大程度影响到用户的直观体验好坏。

如果运行速度比较慢,笔者认为一些有效的做法是:

(1)重新审视业务方案,看能否从业务处理流程的优化上来优化性能。

(2)审视代码实现方式,尤其是对于一些特别耗费时间的操作,如IO操作(磁盘和网络IO)、数据库操作、多层循环计算等。

重新审视业务方案要求我们把事情放在根本上来解决,根据笔者的经验,性能问题绝大部分是业务方案的问题,如果优化来业务方案,性能问题可能就也随着解决了。这就要求我们更加深入地去了解业务,去发现业务处理过程中有哪些可以改进优化的流程。

审视代码实现要求我们在编码过程中保持对于耗时操作的代码编写的谨慎,需要多考虑在多并发、多线程、资源共用等运行状态下的高性能实现方案。笔者曾经在没有修改业务方案的前提下,通过优化代码,把运行性能提高了将近一百倍。

第五章 变化

程序存在的时间越久,它的某个部分需要变化的可能性就越高。
三个误区:编写不必要的代码;代码难以修改;过分追求通用。
删除不必要的代码,未来的需求未来再写。
根据当前的需求,而不是未来的需求。
渐进式开发及设计

  •   可扩展性
      新的功能可以很容易地加入到系统中。这是“过于僵硬”的对立面。

软件系统不是在真空中使用的。其他人会使用、维护、文档化你的系统。这依赖于对你系统的理解。所以,你设计、实现的东西应当能够让别人理解。要记住,你写的代码并非只给计算机看,你要时时记住,代码还要给人看(Kent Beck) 。如果到处泛滥似是而非的代码,别人如何能够辨别这些代码的相似和不同,如何去理解这些代码之间具有何种关系。

前言

随着需求和规模的增大,软件系统变成了一个复杂系统,除了实现业务需求和非功能需求的必要复杂性外,我们希望系统的复杂性越低越好。当然我们的目的不是要消除复杂性,而是要能够驾驭它、利用它。在这篇文章中,笔者尝试以软件领域的两个基础原则和两个重要概念出发,来对如何做软件设计做一些思考。

首先来看一下什么是复杂系统。

2.3 为什么不存在软件设计科学

历史原因造成缺失“软件管理科学”和“软件设计科学”。
而软件复杂性的主要根源就在于缺乏科学。

针对“修改已有功能”,也就是系统的“灵活性”差

责任编辑:

软件系统的两个基础原则

1、可服务性是软件系统的第一需要。

软件系统需要优先保证的就是对于外部调用者的可服务能力。

2、随着软件系统需求的不断加入以及用户量的增加,系统的熵以及所需资源都在不断增大。

系统的熵的增大代表软件系统的复杂性增加,系统所需资源的增大代表软件系统的规模在增大,当复杂性和规模一起增大时,根据排列组合原理,它们会产生四种不同的组合:

(1)复杂性增加的很快,规模增加的很快;

(2)复杂性增加的很快,规模增加的很慢;

(3)复杂性增加的很慢,规模增加的很快;

(4)复杂性增加的很慢,规模增加的很慢。

软件系统的设计目标应该是复杂性和规模都增加的很慢,并且软件系统的复杂度要能够在我们的驾驭范围之内。但是目前软件设计中普遍的困境就是:随着复杂性越来越高,软件系统变成了一个复杂系统,人们往往只能理解复杂系统的一部分,所以越来越难以从全局的角度去思考越来越复杂的软件系统的设计,导致软件的熵的增大会越来越快。当熵值超过了一定的阈值后,系统会突然变得非常难以维护和扩展,这样就会导致软件系统的可服务性越来越差,并且差的趋势会越来越明显。

面对软件系统的熵日益增大的问题,通常的解决办法就是把软件系统非常明确地切割成几部分,使得每一部分的熵都在人理解的阈值以下,每一部分都安排专门负责设计的人。但是这种解决办法不能解决这个问题,因为架构是一个统一的综合体系,这种考虑就决定了必须有一个掌握全局的人,这种解决办法存在以下几个严重的问题:

(1)每一部分负责设计的人都很难看到全局,不可能站在全局的高度去思考整个系统的设计;

(2)局部最优并不能够说明是全局最优,甚至有可能局部最优的方案会使得全局受到很大的伤害。

(3)没有一个人能够掌控全局,这样会使得整个软件系统的熵增越来越难以控制,整个系统迟早会掉入到无法维护的境地。

为了解决上面的这个困境,必须使得软件系统的熵控制在合理的范围内,并且还要保证所需的资源尽量的少,这样必须有更加合理的设计方式和设计理念。这就需要引出软件领域中两个重要的概念:可维护性和性能。系统具有好的可维护性可以让系统的熵保持在可理解的范围内,系统具有好的性能可以让系统的规模保持在合理的范围内。

图1:软件系统的两个基础原则和重要概念

1.1 计算机出了什么问题?

计算机为什么这么容易出问题?原因是:编程写得太糟糕。
程序太复杂了,需要 化繁为简

必威体育betway787 4

2、编码速度快

编码是一项把设计意图实现的活动。只有在设计意图明确清楚的情况下,编码的速度和质量才会有保障。

要保证编码的速度快,笔者认为的一些有效做法是:

(1)理解清楚设计意图。

(2)避免技术上的欠债。

(3)重构、重构、再重构。

理解清楚设计意图要求我们的设计的输出是规范、易理解的。现在一般有两种方式:一种是设计和编码实现是同一个人,类似于全栈的形式,就是由某一个人负责从需求的分析、设计、编码及后续的上线维护。另一种形式就是设计和编码实现是不同的人。不管是哪种形式,对于设计输出的规范和易理解再强调也不为过的,因为还需要考虑到后面换人或者维护时候的编码效率问题。

避免技术上的欠债要求我们不能为了短期的利益而放弃长远的利益。有时候为了一些紧急的需求采取了一些临时的解决方案,但这些解决方案对于整个系统的长远利益是有危害的。

重构要求我们看到代码中不合理的地方就要实行修改,避免破窗效应的发生。重构是一个trade-off的过程,根据业务需求来平衡可维护性、性能等方面。好的代码很大部分是重构出来的,只有在基于好代码的基础上,开发的速度才能有保障。

第一章 引言

  • 重用和抽象的基础
  • 可以自上而下设计,也可以通过重构自下而上
  • 优先使用合成/聚合,而不是使用继承

一个软件系统存在的理由就是:为它的用户提供价值。你所有的决定都取决于这一点。在指定一个系统需求,在写下一段系统功能,在决定硬件平台和开发过程之前,问你自己一个问题,“这样做会为系统增加价值吗?“,如果答案是”yes”,做。如果是”No”,不做。这个原则是其他原则的原则。

1、设计速度快

设计怎么同时兼顾速度和质量?笔者认为的一个可能有效的做法如下:

(1)弄清楚要解决的问题是什么?

(2)设计现状可视化

(3)设计动作标准化

弄清楚要解决的问题是什么非常重要,但是这也是很多设计人员没有仔细思考的地方。尽快采取行动没有问题,但是我们要清楚行动只是解决方案,一个没有针对问题的解决方案即便实现的再好,速度再快也是没有用的。爱因斯坦曾经说过:如果只有一个小时的时间来解决问题,我会花55分钟来思考问题是什么,五分钟来思考解决方案。把问题想清楚后,设计出来的东西往往就会更加简洁、易理解并且可重用性很好。

设计现状可视化要求我们把系统的现有设计用图形化的方式展现出来,可以保证不同的人对于同一个设计的理解是基本一致的,理解的程度也是差不多的,这样就可以做到不管是谁来设计,设计的速度有保证。

设计动作标准化要求把设计的输出要素整理成一个详细的清单,清单里列举了系统设计的必须步骤和详细描述,这样不管谁来设计,设计的结果质量有保证。这里需要注意的是,设计清单不要大而空,只是一些原则性的东西,而是一定要实际的可以落地的东西。

第四章 未来

设计软件时,应该做怎样的决定?

        可扩展性:开-闭原则、里氏代换原则、依赖倒置原则、组合/聚合复用原则

4.第四原则:你制造的,别人会消费

2、代码可维护。

在实际的项目中,很难维护的代码通常有以下几个典型特征:

(1)命名随意:代码命名不规范、不合理。

(2)违反DRY原则:重复代码多。

(3)上帝类和上帝方法:类和方法职责不清晰、类和方法过长等。

(4)上下层循环依赖:上层和下层的循环依赖等。

等等。

从笔者的实际经验来看,代码层面的可维护性虽然跟开发人员的设计能力有一定的关系,但是主要还是代码编写时的意识问题。开发人员需要去注重培养怎么去写好代码的意识,试想命名合理、注释规范、几乎没有重复代码、不存在上帝类和上帝方法、没有循环依赖这几个基本代码的要求,其实要做到也不难。

当然代码的可维护性里也包括扩展的灵活性,要做到对扩展开放、对修改关闭,需要有一定的抽象设计能力,这个需要有一定的经验积累才能做到。

  • 第一章 引言
  • 第二章 缺失的科学
  • 第三章 软件设计的推动力
  • 第四章 未来
  • 第五章 变化
  • 第六章 缺陷与设计
  • 第七章 简洁
  • 第八章 复杂性
  • 第九章 测试
  • 读后感
  • 对象在不同时刻体现为不同类型的能力
  • 将对象形态的决定权交给了调用者,保证了程序的灵活性
  • 还保证了程序的稳定性

新的文献正在以软件模式的形式寻觅设计的重用。然而,这只是战斗的一部分。与组织中的其他人交流重用的机会至关重要。如何重用你不知道的东西?提前规划重用可降低成本并提高可重用组件及其所在系统的价值。

可维护性

经常会听到开发人员抱怨说某个系统维护性太差了,可能主要表现在几个方面:

(1)当增加新的需求时,不能确定该需求的实现要在哪几个模块中进行,也不确定每个模块完成该需求的哪些部分。

(2)需要在同一模块的多个“意想不到”的地方修改代码:修改某个bug时,发现要修改的代码分散在不同的地方,而且这些要修改的地方很多都是人“意想不到”的。

(3)很容易造成修改引入:修改某个bug时,这个bug修改好了,很大概率会引入其它bug,而且这种修改没办法用扩展的方式进行(使用扩展方式成本太高等原因)。

(4)代码无法自注释或者缺少必要的文字注释,完全不明白代码要处理的业务逻辑是什么。

(5)对于线上运行系统的问题定位非常困难,依据线上的日志没办法定位出具体问题,需要人工在测试环境中进行重现,并且不断地打补丁进行定位。

等等。

可维护性是软件系统好坏的关键衡量指标之一,一个维护性差的系统不管是需求的设计和开发、运行维护等都会非常困难,并且效率低下,可维护性主要包括以下几个方面:

8.6 推倒重来

前提是:

  • 完成了准确评估,新系统比现有系统效率更高
  • 有足够时间
  • 设计更好(要么是你自己变牛逼了,要么是更牛逼的人来设计)
  • 设计好阶段性成果,能够获得积极反馈
  • 有足够资源,不光是时间,还要考虑维护两套系统

      灵 活 性:必威体育betway787 ,开-闭原则、迪米特法则、接口隔离原则

3.第三原则 :保持远见

读后感

  1. 化繁为简、提高代码质量
  2. 不仅要明确软件设计中的规则,能够应用到实际软件开发中,还要能够给其他人清楚讲解,要能够扛得住别人的challenge,要能够说服别人!
  3. 在软件设计时就要考虑维护成本,降低维护成本比降低实现成本更重要。
  4. 维护成本正比于系统的复杂程度。
  5. 避免编写不必要的代码,要保证代码容易修改,避免过分通用。
  •   过于脆弱

    与过于僵硬同时存在,对一个地方的改动,往往会导致看上去没有关系的另外一个地方发生故障。在修改完成之前,连系统的原始设计师们都无法确切预测到可能会波及哪些地方。这种一碰就碎的情况,造成了软件系统过于脆弱。

6.第六原则:为重用做好计划

第九章 测试

你对软件行为的了解程度,等于你真正测试它的程度

      可插入性:开-闭原则、里氏代换原则、组合/聚合复用原则、依赖倒置原则 

这些原则告诉我们轻松地复制、粘贴和修改代码不可能产生好的,也就是容易理解、维护、重用的代码。但请不要走极端。 我一直认为,一个好的软件系统是各种因素权衡的结果,也就是你如何把握一个度的问题,明确的思想进入到系统,就会产出价值。应用前六个原则需要深入的思考,当然潜在的回报也是不可估量。


继承  

5.第五原则:对将来开放

8.5 应对复杂性

  • 把某个部分变简单
  • 不可解决的复杂性:包装一层以屏蔽复杂性,让其他程序员更容易使用和理解。
  •   灵活性
      允许代码修改平稳进行,而不会波及到其它的模块。这是“过于脆弱”的对立面。

原标题:软件开发,必知的七大原则

软件设计科学的目标

  • 确保软件能提供尽可能多的帮助
  • 确保软件能持续提供尽可能多的帮助
  • 设计程序员尽可能容易得开发和维护软件系统
  •   过于僵硬

    很难加入新的功能。加入新功能,不仅意味着构造一个独立的模块,而且因为这个新功能会波及很多其他模块,最后变成跨越几个模块的改动。由于这种设计上的缺陷,项目经理不敢轻易向系统加入新功能。这就造成了一个系统一旦做好,就不能增加新功能的僵硬化情况。

7.第七原则:思考!

明确一个原则

软件的目的是为了帮助人,为了解决问题的。
明确目标后,要针对每一条功能问自己:这个功能是怎样帮助人去做某件事的呢?
好处是:

  • 剔除没用的功能
  • 帮助澄清该功能的描述或实现方式中的模糊之处
  • 确认功能的价值
  • 安排优先级
  • 删减价值不大的功能

 

必威体育betway787 5

2.2 软件设计的科学

书中列出了关于软件开发的若干定义(Definition)、事实(Fact)、条例(Rule)、规则(Law)。
其中规则最为重要。它是永远为真的事实,涵盖了很多领域的只是。它们帮助我们发现其他重要的真理以及帮助我们预测未来要发生的事情。
这些定义、事实、条例、规则的时候,很多都是显而易见的,但是我们需要问问自己:

  • 我是否知道,某些特定的说法是否经过了证实?
  • 我是否清楚它的重要性?
  • 我是否可以向其他人清楚讲解,让对方彻底明白?
  • 我是否明白,在软件开发领域中,它与其他部分知识的关系如何?

 

重用可节省时间和精力。实现高水平的重用可以说是开发软件系统最难的目标。代码和设计的重用已被宣称为使用面向对象技术的主要优势。但是,这项投资的回报并不是自动的。为了利用面向对象编程提供的重用可能性,我们需要预先考虑和规划。在系统开发过程的每个级别都有很多技术可以用来实现重用。详细设计和代码级别的重用技术不但众所周知而且是有文档的。

4.2 设计的质量

设计的质量好坏,正比于该系统在未来能持续帮人他人时间的长度。
使用的时间越长,越需要慎重的设计。

提升可维护性的 4 个目标

2.第二原则(能简单就简单,愚蠢!)KISS

第八章 复杂性

新增功能、扩展软件用途、新增程序员、做无谓的改变、困于糟糕的技术、理解错误、糟糕的设计、没有设计、重新发明轮子都会增加软件的复杂性。

如何同时提高一个软件系统的可维护性和可复用性,是面向对象设计要解决的核心问题。

多态  

  • 复用焦点从实现细节提升到抽象层次  
  • 更好地改善软件系统的可维护性

面向对象设计的复用

 

 

针对“替换现有功能”,也就是“可插入性”差
  •   黏度过高

    有的时候,改动可以用保持原始设计意图和原始设计框架的方式进行,也可以用破坏原始意图和框架的方式进行。第一种方式无疑会对系统的未来有利,第二种方式只是权宜之计,可以解决短期的问题,但却会牺牲中长期的利益。

    一个系统设计,如果总是使得第二种方式比第一种方式容易,就叫做黏度过高。一个黏度过高的系统会诱使维护它的程序员采取错误的维护方案,并惩罚采取正确维护方案的程序员。

针对“新增功能”,也就是系统的“可扩展性”差

 

  • 必威app体育 ,封装,就是合理的隐藏与公开
  • 对数据的隐藏、对实现的封装、对变化进行封装
  • 提高代码可读性,使系统更易理解和使用

 

 

  • 提高生产效率
  • 提高软件质量
  • 改善可维护性

对象的封装、继承与多态,保证了对象的高内聚与低耦合,有利于软件模块的复用,保证了程序的可扩展,这也是面向对象思想在软件设计中的最大优势。

 

面向对象设计通过提供了封装、继承和多态等特性,使得一个系统可以在更高的层次上提供可复用性。数据的抽象化和继承关系使得概念和定义可以复用;多态性使得实现和应用可以复用;而抽象化和封装可以保持和促进系统的可维护性。 

 

一个致命缺陷是复用常常以破坏可维护性为代价。比如,两个模块A、B同时需要使用一个模块C的功能。那么,当A需要C增加一个新的行为时,B有可能不需要,甚至不允许C增加这个新行为。如果坚持复用,就不得以系统的可维护性为代价;而如果从保持系统的可维护性出发,就只好放弃复用。

     面向对象思想包含三个核心要素,即:封装、继承、多态,它将面向对象技术推到了思想的境界。只有真正理解了这三个要素,才算得上掌握了面向对象思想的精髓。

未完待续。。。

系统的可复用性

 

复用的重要性  

可维护性低的 4 个症状:

  •   复用率低

    所谓复用,就是指一个软件的组成部分,可以在同一个项目的不同地方甚至另一个项目中重复使用。每当程序员发现一段代码、函数、模块所做的事情是可以在新的模块、或者新的系统中使用的时候,总是发现,这些已有的代码依赖于一大推其他的东西,以至于很难将它们分开。最后,大家发现最好的办法就是不去“碰”这些已有的东西,而是重新写自己的代码。过程中也可能通过源代码复制与粘贴的方式,以最原始的复用方式,节省一些时间。

传统的复用  

面向对象思想的三大核心要素

封装  

本文由必威体育betway787发布于必威-国际游戏,转载请注明出处:【必威体育betway787】软件开发,简约之美

关键词:

最火资讯