接口设计定理

news/2024/7/5 9:06:17
 
接口设计定理
 
相关文章链接: 模块分解原理探索
                        模块分解原理与三权分立
                        接口关系稳定原理探索
 
前面几篇文章中讲过模块分解原理和接口关系稳定原理,这篇文章中将使用模块分解原理和接口关系稳定原理来推导一个重要的定理:接口设计定理。
在讲解接口设计定理前,先看一下Robert C.Martin著的《敏捷软件开发》一书中提到的一个“开放-封闭”原则,意思是说“软件实体(模块、类、函数等)应该是可以扩展的,但是是不可修改的”。
按照书中的意思,实际上应该把“开放-封闭”原则描述成“接口应该是可以扩展的,但是是不可修改的”,可能意思会更确切一些。
许多人可能感兴趣的是如何设计接口才能满足“开放-封闭原则”。
接口设计定理
定义:把符合接口关系稳定原理的系统称为 亚稳定系统,如果亚稳定系统中各个模块在发生变化时只需添加接口而不用修改已有的接口,那么称之为 稳定系统
根据稳定系统的定义,可以很容易得到以下推论:
推论:稳定系统中的接口是满足“开放-封闭”原则的。
当然满足“开放-封闭”原则的系统不一定是稳定系统,因为它不一定满足接口关系稳定原理。
设计一个稳定系统成了构架设计的重要目标,下面给出接口设计定理的描述:
接口设计定理 :当系统中的每个模块的接口集合是它所属专业领域的最优接口集合的一个子集时,系统是稳定系统。
 
当需求发生变化时,只需要将需求重新分解到各个专业模块里进行处理,由于每个专业模块已有接口集合都是所属专业领域的最优接口集合的一个子集,因此可以在整个专业领域的最优接口集合中找出对应的接口添加到已有的子集里使得新的问题得到解决,无需修改任何已有的接口,根据稳定系统的定义可以得出系统是稳定系统。
根据接口设计定理,在设计模块的接口时,需要在模块所属的专业领域范围内来设计接口,然后从专业领域范围内的最优接口集合中选择一个能覆盖当前需求的最小接口子集就可以了。
如何对整个专业领域设计最优接口集合呢?业界流行的“最小接口”和“人本接口”设计均属于最优的设计的一种。不过接口设计定理对设计人员的要求大大提高了,因为设计人员必须对系统中各个模块所属的不同专业领域都有非常全面的了解。
最优接口集合设计还需要遵循软件安全性设计的一些原则,如“测试空间要尽量小且容易构造”,“设计空间要满足需求情况下尽可能的小”等。
接口设计定理的意义
接口设计定理的意义在于如果业界将各个专业领域的最优接口集合定义好的话,那么设计人员就可以利用已有的最优接口集合来选择子集所需要的子集。大大缩减设计人员进行接口设计的难度。
不过现实情况中,许多专业领域都不成熟,无法对整个专业领域设计处最优接口集合,如果想要完全依赖接口设计定理来设计接口是很困难的,但是对已知成熟的专业领域,使用接口设计定理来设计接口是一个不错的选择。一般来说越上层的模块,接口设计的难度越大,而越下层的模块,接口设计的难度要低,因为下层模块通常都属于成熟的专业领域。
 
 



http://www.niftyadmin.cn/n/3657775.html

相关文章

Pyramidal Person Re-IDentification via Multi-Loss Dynamic Training 复现代码

Pyramidal Person Re-IDentification via Multi-Loss Dynamic Training是 CVPR2019 REID相关论文,有人对其进行了复现,代码在这里了 https://github.com/t20134297/Pyramidal_Person_ReID

接口重构定理与Open-Close原则

接口重构定理与Open-Close原则相关文章链接: 模块分解原理探索模块分解原理与三权分立接口关系稳定原理探索接口设计定理前几篇文章讲过了模块分解原理及接口关系稳定原理,并由模块分解原理和接口关系稳定原理推导出了一个接口设计定理,这篇文…

cvpr2019 reid

Oral: Joint Discriminative and Generative Learning for Person Re-identification. Zhedong Zheng; Xiaodong Yang; Zhiding Yu; Liang Zheng ; Yi Yang ; Jan Kautz https://arxiv.org/abs/1904.07223 代码:https://github.com/NVlabs/DG-Net https://zhuanl…

称球问题的测试解法

称球问题十几年前就在深圳的一网情深BBS上成为热门问题,此后的十余年间不断有人提起此问题,前段时间还在网上看到有人重新提起此问题,已经成为了新网民的入门级必知必会问题之一。称球问题一般会有以下3种情况:1、M个球&#xff0…

多核编程中的任务分组竞争模式

多核编程中的任务分组竞争模式在多核编程中,锁竞争导致的CPU饥饿现象是引起多核CPU性能无法发挥的最重要原因之一,在多核编程中的锁竞争难题一文中已经讲过锁竞争对性能的影响,如何消解锁竞争导致的CPU饥饿现象成了迫切需要解决的问题。目前业…

多核编程中的任务随机竞争模式的概率分析

多核编程中的任务随机竞争模式的概率分析前一篇多核编程中的任务分组竞争模式中谈到了让任务分组竞争以解决多核CPU遇到的锁竞争导致的饥饿问题。但是并不是任意的共享数据都能够设计成进行分组竞争的模式,比如最常用的需要用于查找的数据结构,当数据结构…

向github上传代码

(1)git init (2)git add . (3)git commit -m jvj (4)git remote add origin https://github.com/t20134297/file_arrange.git 如果出现错误: fatal: remote origin already exists 则执行以下语句: git remote rm origin 再执行git remote add…

OpenMP创建线程中的锁及原子操作性能比较

OpenMP创建线程中的锁及原子操作性能比较相关文档连接:多核编程中的任务随机竞争模式的概率分析 多核编程中的任务分组竞争模式 多核编程中的负载平衡难题 多核编程中的锁竞争难题 多核编程的几个难题及其应对策略(难题一)OpenMP并…