软件设计原则总结


1.问题界定。
 问题的界定,对于软件开发来说是直观重要的.因为任何一个软件都不是单纯的独立服务的.
必定是为了解决某些问题而开发软件进行更好的解决问题. 因此,问题的界定对于软件的成功开发和应用来说致关重要. 但同时,问题界定也是最难处理的一部分.我相信工作几年,或者读过<<你的灯亮着吗>>这本书的人,对于问题定义肯定会有非常深刻的认知和理解. 问题界定的主要目的是让我们能够明白软件系统作什么是足够的,同时也可以让我们考虑到系统以后的功能能够在哪些方面继续扩展.问题界定,这个看起来似乎很容易做的事情,实际上却不得不花费我们大量的时间和精力去处理. 希望你能够把这件事情做得干脆,漂亮,利落. 那么在以后的开发中,你的力气不会白花.

2.基本功能实现.
 问题界定了就意味着我们已经规划好,或者和甲方谈好,我们的系统需要实现什么,以及需要
完成什么处理. 基本功能,就是我们软件系统的核心体现. 如果你的软件没有为他们解决问题,他们是不原意为之付出代价的. 也就意味着你的软件会亏本. 所以,系统基本功能实现,对于任何一个软件,或者软件开发者来讲, 都是基本素质的体现. 我们有义务,也有压力把我们的系统的基本功能做好.当然,做好的标准很多,比如正确性, 可扩展, 高性能, 以及其他各种标准. 我希望我们都可以站在更高的角度去审视我们的软件,我们做到更好了吗?

3.极端情况处理.
 至于为什么,要把"极端情况处理"放到这里来讲. 主要原因是很多软件的评价者对于软件的
要求都很高. 另外,就是软件的适应性要好,因此,必须处理这些极端情况. 这里2-8原则在这里体现了很多. 占系统80%的代码都在处理占系统20%的意外,极端情况. 正如<<你的灯亮着吗>>所说,如果你没有为你的解决方案找到至少三种可能的意外,你的方案就不可能不出问题.


4.客户体验之上.
 软件的主要服务对象是人. 这就是为什么要说"客户体验之上".

5.系统在整个大的系统的位置,以及其对外接口很重要.
 系统有了强大的功能,就意味着可能我们的软件会为其他人提供更好的服务,也就可能会有
更多的客户来购买我们的系统.整个系统就会被重新部署到其他位置,而新的位置,我们的系统十分能够依然提供强大的功能呢? 这就要我们考虑更多的系统对外接口. 就像很多话所说:一个人的英雄不是英雄,大家一起创造的成功才真正值得庆贺。如果我们的系统功能强大,却独属于一个孤岛。那我们的系统要想发挥其强大的作用,就会变得越来越难了。因此,我们为了让我们的软件系统可以更好的服务客户,也为了我们的软件系统可以得到更好的回报,我们有必要对我们系统提供的接口作更多的完善.
 就像很多著名的软件一样, 关键的作用是他整合了很多其他人所不曾涉及的边界领域,也
因此得到了很好的发展和推广.
6.封装功能,松散变化.(也就是高内聚,低耦合. 开放-封闭原则)
 在面向对象的编程过程当中,我们经常会遇到"开放-封闭"原则.其实,这个原则并不只是应用
于面向对象的编程. 在我们日常的工作当中,很多事情都需要这些原则,用来保证我们可以更高效的开发软件,提高办事效率. 把功能独立封装,增加他的扇出,减少扇入. 同时对于内部我们进行封闭,而对外则提供良好的接口用来提供更多服务. 这也是搞内聚,低耦合在这里的体现。例如在J2EE应用中,把服务类进行充分的封装,这种封装,只要达到了组件的效果,就可以得到很好的应用,而对于Action/Web层等变化比较多的地方,则自己采用独立的方案,这样以来,可以提供一定的代码复用. 但如果想做到更好.就要想更优秀的方法去解决了.
7.可装卸,可配置;
 任何软件的完成,都是作为独立的一个产品来完成的。但同时,软件内部也是包含多个
模块的,各个模块之间或多或少的存在一些耦合。但这些功能的耦合,应该在更理想的一种阶段。就是可配置,可装卸。任何一个模块的去除,不至于影响到其他功能。并且,更多的功能是采用配置的,就是说,各个模块,就像搭积木一样。可以把其中的一块替换掉,或者拿掉,但不可以影响其他的功能。可配置,可装卸的软件,必将是未来软件更为理想的开发模式。这对于系统的维护,以及需求的变更适应性都是非常好的。
8.从用户角度审视和评价软件的可用性,易用性等特征;
真正提升软件产品的质量;

9.不要考虑太多外在的因素。
软件首先是自身的因素。其次才是考虑和其他系统之间的关联和接口;
软件本身的质量保证很高,才能确保提供其他的系统的接口不出现问题;
10.软件的功能需求,与非功能需求;软件的功能需求,是处理程序员(软件设计师)等人员考虑的开发问题,这个阶段,我们主要
集中处理率,软件自身实现的考虑因素。
软件的非功能需求,主要体现在为客户着想的方面。从用户的角度考虑,软件的易用性,高效性,容错性等特点。并且,软件的非功能性需求 ,主要要体现在文档中,我们为客户想到了那些问题? 我们是否为客户解决了当前的所有问题?等 处理好非功能需求,对于软件的使用和推广都是直观重要的。在我们完成了功能需求以后,就应该将开发人员分为两组,从功能和非功能需求两方面考虑
和衡量软件。从而进一步提高软件质量,提高市场占有率,提高软件的价值。提高我们的价值。 

原文地址:https://www.cnblogs.com/daitengfei/p/732614.html