设计方法与实践介绍

时间滴答走,学习不停歇。今天的内容是《设计方法与实践介绍》,我们将从软件设计原则、clean code、单元测试、重构和配置化架构这五大方面给大家进行讲解。

还愣着干什么,学起来吧~

设计方法与实践介绍_第1张图片

01 软件设计原则

1、软件设计的目的

软件设计是为了使软件在长期范围内能够容易的进行变化。我们从下面这三个点来理解这句话。

(1)变化:软件不是一成不变的,无论是软件本身的需求、软件依赖的其他软件资源都是一直在发生变化的,唯一不变的就是变化。

(2)容易:任何一个软件的变化都需要成本,要尽可能的降低变化的成本,使得软件可以很容易应对软件的变化。

(3)长期:事实上需要长期进行维护的软件更应该做好软件设计,因为软件长期的变化非常多,难以提前作出预测,需要良好的软件设计来应对。

2、软件设计原则

设计方法与实践介绍_第2张图片

软件设计有着很多的原则,最基本的原则是高内聚低耦合,它也是软件设计追求的最高目标。内聚指的是一个软件内部间元素相关联的程度。高内聚追求的是紧密相关联的元素要放在一起。低耦合指的是单位之间尽可能少地关联,依赖。

在高内聚低耦合之上有很多其他的原则:如SOLID原则、简单设计、正交设计,在这之上还会有设计模式作为最高层的软件设计原则。

02 clean code

1、clean code的概念

clean code中文解释为整洁代码,是指写的代码能够在尽可能短的时间内被别人读懂,且代码看上去排版整洁、逻辑清晰、扩展性好。

2、命名规则

代码中命名需要遵循以下的几个规则:

(1) 表达它是什么,不要表达怎么做。

(2) 代码要做到自注释。

(3) 使用有意义的循环迭代变量。

(4) 避免缩写,尤其拼音缩写。

(5) 不要使用非约定俗成的缩写。

(6) 避免使用魔法数。

(7) 不要害怕长变量名。

3、注释

注释对于代码来说是必不可少的。通常情况下,好的注释包含:版权信息,设计意图,警示信息。

不好的注释则具有以下一个或几个特点:同义反复、隐晦关联关系、套用模板、提供历史修改记录以及注释掉的代码。

4、函数

在写函数时,应当注意,每个函数只做一件事,每个函数都是单一职责的。

函数分为骨架函数和步骤函数。

→ 骨架函数是业务逻辑和算法是在高层次上的抽象描述。

→步骤函数是业务逻辑和算法的一些实现细节,是被隐藏起来的。

5、编码细节

在编码细节方面,需要遵循以下几点规则:

(1)使用自然的比较顺序。

(2)简化逻辑层次,避免多层嵌套。

(3)在写三元表达式时不要出现复杂的逻辑和过长的条件。

(4)需要控制变量的作用域,也就是缩小变量作用域的范围,越小越好。

03 单元测试

1、为什么进行单元测试

测试是分为不同层次的:最底层是单元测试,中间是基于模块级、组件级的测试,再往上则是系统级别的测试。

越底层的测试,越能够快速地发现问题。底层的测试集成性更好,能够安全的进行代码修改。上层的测试一般情况下获得反馈的速度比较慢,测试过程也比较笨重。

所以单元测试具有更早发现问题,更容易集成,更安全地代码修改的优点。

2、写好单元测试的重要性

写好单元测试不是一件容易的事情,需要花费许多时间。

设计方法与实践介绍_第3张图片

请看上面的示意图:x轴上方表示的是单元测试的成本,在实际开发的过程中,写单元测试的成本甚至不亚于写代码的成本。单元测试带来的好处就是可以降低产品开发的成本

好的单元测试能够降低产品开发的成本。如果单元测试写得不好的话,不但会增加产品开发的成本,而且还会增加单元测试成本。

3、单元测试原则与模式

单元测试具有许多的原则与模式,本次课程重点介绍四个原则。

第一个原则:Tests As Documentation
将测试当成一个文档工作,也就是说我们需要把测试写得像文档一样简洁,通过一些描述,可以清晰地知道这个测试的作用。在之后对项目修改时,只需要查看单元测试即可。
第二个原则:Fully Automated and Self-Checking
单元测试都是可以进行自我检查、自我校验的,通过代码的编写,能够知道测试是否成功,不需要人为判定。
第三个原则:Do No Harm,不可破坏性。
部分开发人员在进行测试时,为了完成目的,会基于测试代码创立一些逻辑,这种做法是错误的。在写测试时不能单独为测试创建特别的逻辑,更不能破坏原有代码的逻辑。
第四个原则:Keep tests as simple as possible,简洁性。
单元测试虽然是用来保证代码的正确性,但单元测试也是一份代码,为了避免过多的测试代码相覆盖,要尽可能地把单元测试的代码写得简单,保证其不会出错。

04 重构

在进行重构时需要遵循一定的规则。

1、业务导向

重构一定是要解决实际的业务问题的,而不是为了重构去重构。

2、小步快跑

通常重构是需要多人同时参与,重构过程中开发人员要随时对比主干与分支的情况。当某一个开发人员在分支上进行了大量改动并准备将其合并到主干时,有可能主干和分支的代码有很大的差异。所以进行重构时,要将问题拆分成多个小的单元进行修改,并且每修改一个就进行一次分支合并。这种小步快跑的模式可以随时同步主干上的代码,减少出错的可能。

3、演进式设计

在进行代码重构之前,我们不可能知道重构的最终结果是什么。为了保证能够得到一个比较好的结果,我们采用演进式设计方法。在重构过程中遵循包括高内聚低耦合、正交设计原则、SOLID原则等软件设计原则,不断地用小步快跑的方式去重构,只有这样结果才能令人满意。

4、正交设计原则

正交设计原则包括:分离关注点、消除重复、缩小依赖范围、向着稳定的方向依赖。

在代码中,根据功能的不同,将其分为不同的变化方向。每个变化方向都是一个职责,我们把每一个不同的变化方向称作关注点,根据它的变化方向来进行相应的处理。

05 配置化架构

1、配置化架构的定义为:

以可配置的方式构建软件的方法。它是在领域建模的基础上,以配置表述业务,以配置组织架构元素,比如服务、组件、数据等,并对配置进行规范化、自动化的管理。

之所以做出这样的定义,有如下原因:
①通常情况下配置指的是对数据的抽象,需要架构上的描述;
②架构上描述的配置指的是对架构元素的抽象,描述配置化不完整;
③配置化包括对业务的抽象,尤其是逻辑;
④配置化还包括对配置的管理以及分支。

2、如何应用配置化架构

应用配置化架构包括三方面:从业务上改造,提高配置本身的开发效率,降低配置的维护成本。

(1)业务配置化改造

①组件配置化

组件配置化表达是业务层面上非常重要的一环,组件是一个独立升级发布的单元,这样的单元关联了很多配置,可将这些配置分为两类。一类是组件内部的配置,另二类是描述组件与组件间关系的配置。只有组件配置化是不够的,往往还需要构建DSL来帮助。

②构建DSL:

DSL是工程师针对不同的领域创建的语言。具有很强的针对性,在专业领域有时很长的代码只需要将其改为一行配置就足够了。

(2)提高配置的开发效率

通过下面的持续发布的系统,能够很好地提高配置的开发效率。它只针对配置,可以独立的发布配置。在系统中:需要配置前端编辑逻辑,后端校验逻辑,当存储发生变更时,触发测试流水线,当测试流水线无异常后,才会借用部署的工具,将配置分发到线上去。

(3)降低配置的维护成本

通常来说,代码数量很大的项目,配置也会很多。这样的配置在维护起来需要花费大量的成本。所以在设计配置的时候,要满足以下这些规则:

① 让配置尽可能地在部署、数据版本、业务属性和架构描述这四个不同维度间参数能够共用。把部署的配置和策略的配置分离开来。

② 针对配置本身的语法,让配置支持合并.

③ 减少冗余信。

④ 消除信息重复。

⑤ 使用配置的默认值。

今天的知识详解到这里结束啦,点击进入了解更多技术资讯~~

你可能感兴趣的