软件正交设计四原则

软件设计旨在实现功能需求,强调易于重用、理解和维护。关键原则包括消除冗余、分离关注点、减少依赖及向稳定方向依赖。高内聚、低耦合是提升可重用性的标准,DRY(DontRepeatYourself)和SRP(单一职责原则)是设计指导方针。正交性确保设计的独立性和解耦性,促进系统的灵活性和可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、软件设计是什么

        软件设计是为了长期更加容易地适应未来的变化。正确的软件设计方法是为了长期地,更好更快、更容易地实现软件价值的交付。

2、软件设计的目标

        软件设计就是为了完成如下目标,其可验证性、重要程度依次减低。

        > 实现功能(需求)

        > 易于重用

        > 易于理解

        > 没有冗余

(1)实现功能

        实现功能的目标压倒一切,这也是软件设计的首要标准。如何判定系统功能的完备性呢?通过所有的测试用例!

        测试用例就是对需求的阐述,是一个闭环的反馈系统,保证其系统的正确性;及其保证设计的合理性,恰如其分;

(2)易于重用

        易于重用的软件结构,使得其应对变化更具弹性;可被容易的修改,具有更加适应变化的能力。

        最理想的情况下,所有的软件修改都具有局部性。但现实并非如此,软件设计往往需要花费很大的精力用于依赖的管理,让组件之间的关系变得清晰、一致。

        软件设计的最高标准是什么呢?“高内聚、低耦合”原则是提高可重用性的最高原则。

(3)易于理解

        好的设计不只是知道计算机指令,更重要的是能让其他人也能容易地理解,包括系统的行为,业务的规则。那么什么样的设计才算得上易于理解呢?

        Clean Code(代码整洁)

        这个包含很多,如格式、封装等。

        Implement Patterns(实现模式)

        采用通用的实现模式,特别是一个组织或开发团队。如DDD(领域驱动设计)、架构模式、DCI、设计模式等,是开发人员形成的共识。

        Idioms

        遵循一些设计原则,如简单设计原则、正交设计原则、面向对象设计原则、高内聚低耦合原则、小类大对象等原则。

        (4)没有冗余

        没有冗余的系统是最简单的系统,恰如其分的系统,不做任何过度设计的系统。

        Dead Code

        从未被执行的代码。

        YAGNI(You Ain't Connna Need It)

        不要做过度设计:你没有必要那么着急,不要给你定义的类实现过于早的功能,只需要先实现好现在需要的功能点。

        KISS(Keep it simple,Stupid)

        尽量保持简单

3、软件设计的正交性

> 正交(orthogonality)意味着独立性,如果A的改变不影响B,那么A和B在设计上是正交的。

>  设计正交,即意味着设计的解耦(Decouple),通过解耦,消除不相关组件之间的影响。

> 设计不正交,即意味着耦合度高,牵一发而动全身,难以变更和修复。

4、软件正交设计四原则

(1)消除重复性

        函数代码重复、数据成员重复、子父类重复、结构性重复,重新发明轮子,... 一切形似重复都要革除。

重复类型处理
完全重复删掉重复
参数型重复:两个函数的算法相同,只是处理的数据不同将差异的数据参数化
调用型重复如果两个函数的重复部分完全相同,可以将重复的部分提取为函数Func,然后原函数各自对Func进行调用
回调型重复如果两个函数的重复部分完全相同,可以将重复的部分提取为函数Func,将差异的部分形成原型相同的两个函数s1、s2,然后通过函数Func分别对s1、s2进行调用

        消除重复不影响原有功能的重用粒度。

        重复产生的常见原因:

        > 低成本(复制粘贴)

        > 对于变化的恐惧(另起炉灶)

        > 不易识别(代码混乱)

        >  价值导向(不重视内部质量)

        > 认知差异(不具备敏锐的洞察力)

        重复和重用

        > 消除重复的过程就是一个提供系统可重用性的过程; 

        > 提供系统的可重用性,也就是降低了未来产生重复的可能;

        > DRY(Don't repeat yourself)

        > OAOO (Once and only once)

        > SRP(Singular Responsibility Principle)

(2)分离关注点

        不同关注点的变化方向不一样,分离是为了更好的隔离变化。

(3)减少不必要的依赖

        依赖总是会有的,不必要的依赖关系会带来变化的脆弱性。

(4)向稳定的方向依赖

        依赖稳定点,稳定点即编程契约:抽象类、接口、概念

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值