软件工程师设计技巧,软件工程师需要掌握的知识

首页 > 教育 > 作者:YD1662024-05-20 23:41:02

入行20多年了,做首席架构师/CTO也十多年了,对于如何做软件设计,有一些自己的思考和感悟,这里先记录下几条,跟大家一起来思考。

一:设计的基本技巧

软件设计当中,一个基本的技巧就是:发现和分离变化,并对他们进行抽象和封装,从而实现高内聚和低耦合。

我们做功能设计的时候,会特别强调:要分析出变与不变的地方,只有你找到变和不变的地方,才能够对它进行合理的抽象和封装,从而使得这个系统实现高内聚和低耦合,这样才会有更好的可扩展性、可维护性等。

这个技巧说起来很简单,就是要发现并封装变化,但关键的问题在于:

第一:你怎么才能找到变化的地方

第二:找到了变化的地方过后,你如何封装它才是更好的?

这些都是需要大家在实践当中逐渐去摸索和思考的问题。

软件工程师设计技巧,软件工程师需要掌握的知识(1)

二:设计是一种危险的平衡艺术

实际上,做一个好的设计,就是尽可能的找到那个最佳平衡点,但事实上是否真的找到,其实我们也没有把握。

为什么这么说?就拿咱们谈的这个功能设计来说,需要考虑很多方面,而有些方面,相互是有冲突的。比如说你为了让系统扩展性更好,可维护性更好,你设计的程序结构可能复杂度就上升了,至少开发的复杂度就上升了;或者,你为了让你这个系统的结构更合理,可能就会导致性能会略有下降;可能你为了让你这个系统性能更好,又可能会导致利用的这个资源,消耗的比较大等等的,不一而足。

所以在实际的软件系统设计当中,需要我们去综合考虑这各种因素,然后尽量找到一个折中的解决方案。比如让这个系统性能尽可能的好一点,然后让这个资源消耗又不要那么大,这个时候,你要找一些平衡点,这就是刚刚提到的:设计是一种危险的平衡艺术。

实际上,一个好的解决方案,他一定是在综合兼顾、综合考虑各个方面的要求过后,来找到一个相对组合起来较优或者是最优的这么一个方案,所以你从某一点上去看,这个设计方案并不一定是最优的,因为他还要考虑别的方面。

三:没有完美的设计,设计总是在不断演变当中

对于软件设计,没有人能够说自己设计的是完美的。因为这个设计,就算你感觉在当前的这个情况下,已经完美无缺了。

但是,业务是在变化的,功能是在变化的,技术也是在不断变化的,也就是这些外在的东西都在不断变化中,你的设计不可能说一直保持着是最优的,或者说是最完美的,你的软件设计,也必须伴随着这些东西不断去演变。

软件工程师设计技巧,软件工程师需要掌握的知识(2)

四:设计是没有标准答案的,只要能更好的实现功能,更好的满足软件设计的评价标准,就是好的设计

软件设计中,并没有说设计一定要这么做而不能那么做,这就跟咱们解决问题一样,有很多种解决方案,只是在不同的场合、不同的场景下,还有,考虑问题的角度不一样,最后选择的方案不一样,这很正常。

所以,设计是没有标准答案的,也不存在放之四海而皆准的设计方案。也就是说,不太可能出现,某个设计,在这个系统里是这么做,到了其它系统还这么做,一点都没啥变化。软件设计,要具体问题具体分析。

五:不要过度设计,不等于不设计,而是更要精巧的设计

不要过度设计并不是说不设计,其潜台词,是更要精巧的设计。

“不要过度设计”这句话有点被某些人用烂了,当你看到某个系统做的比较烂,可能会说,为什么这么做,为什么这儿不设计一下,为什么这个地方不提炼一下等等的。有的人会振振有词的给来句“不要过度设计“。

这个,其实真的就跟一个遮羞布一样,不要过度设计,不是叫你不设计,不是叫你瞎做,这个大家一定要正确的认识。事实上不要过度设计,他要求的是:你更要精巧的去思考,你设计出来的东西还要精巧的去取舍,很精细的取舍,哪些东西现在要做进来,哪些东西不要做进来,实际上对你的设计要求更高,而不是叫你直接什么都不做。

事实上,通过精巧的设计,既满足了现有的功能要求,也考虑到了今后的变化,所以,以后变化的地方实际上加入对位置是留好了的,这才叫不要过度设计。

不要过度的本意是说:你不要太过于超前的去设计,就比方说你现在,本来只需要实现三个功能,就算再考虑上变化,可能也就只需要实现四个五个功能,这就足够了。

但是有些人设计能力很强,他说,我想到了这个功能,今后可能有20种变化,那我要不要把这20种变化,现在全部都做上来呢?当然不要了,如果你把这20种都整上来,这就叫过度的设计。也就是说,你往后多看一两步,多做一两步就行了,你不要说,我能看到十步远,我就把十步全做上来,这个就过度了。

因为,随着业务的变化,你现在看到的,以后并不一定会朝那个方向走,现在做太多了,也没有这个必要。所以不要过度,不是说叫你不设计,而是要去思考更精巧的设计。

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.