连载38:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)

从另一个角度看设计

真理可能在少数人一边。

---柏拉图

最初偏离真理毫厘,到头来就会谬之千里。

---亚里士多德

前面的章节中我们从一些正规的角度来阐述软件设计的基本思想原理,然而,如果我们被桎梏于这些所谓的规范化之中,那么我们的设计就黯然失色了,如果不采用另一只眼睛来观察,则永远不可能产生真正的突破。这一章我们就畅所欲言,从另外的角度来看设计。

1. 统一性

在物理学上,万物归一,就是统一成少数的一个或者几个原理,而这样的原理能够更好的驱动整个世界的运转,就如同有质量就有万有引力(或者是更深奥的有质量的物体下具有空间弯曲的广义相对论)一样,对于我们的设计来说,如果能够归于统一是一个非常棒的思路。例如:在我们的一个资费设计中,从业务上将我们存在试用和正式使用的两个状态,试用有时间限制和数量限制。而正式使用的根据费率的方式进行计时和计数进行处理。如果按照一般的设计,我们必然将之划分成两个状态。然后在程序或者数据库中进行区别对待。但是我们想一想,这样是否多余了呢?我们是否可以加之统一起来,我们将试用作为一个默认的处理,设置时间为1周,数量限制为2个。那么这个设置可作为数据库记录中的一个默认设置。这样我就不必进行什么特殊的类型甄别,试用和正式使用就只是数值上的区别,这样我的设计方案就大大简化了。

由于整个世界都趋于一个统一的特点,软件设计的过程中,亟待需要我们的系统能够进行统一化的方式来进行规划和设计。

例如,从计算机体系结构来说,最为简单的地址统一编码,就能够给我们带来十足的好处,可能基于不同的访问速度,不同硬件构造的设备,但是从抽象概念的地址方面,如果我们按照统一的地址进行编码,那么我们的软件系统就首先从这些繁杂的硬件特性中独立开来,在我们的软件系统中,不用体现这些地址上读写方式存在何种差异,软件系统的最为简要的统一性就获得体现。

在PWE3边到边伪线仿真中,IETF指定的PWE3的动机:

ü 通用标签,提供统一的数据传送平台

各种不同业务,如SDH/STM-N、ATM、IP网络基于包,传输时运营商希望这些业务均能以统一的方式汇聚,减少网络数量,配置维护的复杂度和链路的费用。

TDM采用固定带宽的时隙划分,它不支持突发数据业务的统计复用。

ATM技术,采用5字节头家48字节净荷固定长度的信元为基本传送单元,它除了ATM短信元带来的开销以外,还有ATM分拆和组装。(SAR)过程,特别是在高速率是非常困难,基于优化的PSN(分组交换网),这种网络应支持任意长度的网络流。具有执行优化的网络流量工程的能力,并对网络业务流具有分类,执行流量管理控制和按Qos优先等级的保障机制。

ü 仿真专线,提高高回报率的网络业务

尽管Internet业务是增长速度最快的业务,但它没有产生每比特最高的回报。对终端用户来说,专线价格虽然要贵过IP数据业务,但它有更好的业务质量和安全性的保证。

ü 数据感知,实现了不同数据业务的汇聚

数据业务的突发引起整个网络带宽的不足和对业务的Qos构成影响,必须要具有差异化,数据感知的另一个好处是业务在PE侧得到Qos的保障,在核心的IP/MPLS传送网络有专门的隧道,等于核心层通过PE侧知道了用户业务的质量要求,方便了端到端的业务和网络资源配置,大大简化了NGN网络的操作。

ü 保护投资,提供网络业务

PWE3提供了一个通用的封装层,使用PWE3+MPLS构建的网络,可以再新的2层封装新式的业务加入时无需对原有网络做任何改造,公用网络中已经安装巨大数量的传统设备,需要保留这些设备,并与之互连互通。

进行统一首先需要分离,虽然这看起来相矛盾的处理过程,其实并非矛盾,因为只有分离才能够进行统一,只有分离才能够更好的进行抽象,并将共通的东西独立出来,然后再规划统一的处理过程,所以,分离是统一的基础,在分离机制中比较详细的描述了分离的方式和方法,这里就不再赘述了。

一般的情况下,我们可以通过两种不同的抽象过程来达到统一的目的,这两种抽象过程称为“弱抽象”和“强抽象”,前者是从特殊到一般的抽象过程,也就是把一类具体事物或事物关系中的共性加以抽象概括的过程,后者是通过引入新特征而强化原结构的手续所完成的抽象过程,可以简单来说,前者就是我们常常看到的通过抽象的方式,将类事物的共有部分“抽离”出来,后者是通过“填补”的方式,引入新的特征方式,来达到整个系统的一致性的完备性。

第一种方式是常见的,只要我们采用抽象、比较转换的处理就能够更好的达到我们的预期的目标,但是这种方式往往容易因为一些特殊的反例而统一失败的情况。我们还是用编码的例子来说明特殊情况给我们带来的困惑,过去我们常常使用过的ASCII编码方式能够很好的描述英文字母以及字符,ASCII可以使用8位也就是1个字节完全进行描述,但是,当我们需要表达汉字、日语、韩文等形式情况下,我们需要进行扩展,于是就促成了UNICODE编码,UNICODE编码采用2个字节,能够覆盖几乎目前的语言字符,虽然从统一的场面来看已经非常完美了,但是,还存在一些特殊的字符(例如古汉语中的一些繁体字等)依然无法通过UNICODE来表示,但此时,如果再通过更多字节的扩展,其实我们的系统变得非常的生硬了,我们很难更好的进行“平滑的扩展”,注意这里的“平滑”的含义(我们至少在兼容性方式,继续扩展方面无法做到统一化的处理)。于是,为了更好的统一,就出现了一些中间格式的字符集,例如我们常常使用的UTF-8编码。

UTF-8编码规则:如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。

通过UTF-8进行编码,给我们带来了哪些好处呢?一方面是我们兼容ASCII,ASCII表示的信息好UFT-8在表示这个区域的字符是一个值。另一方面,我们可以按照统一规律将字符扩展到4字节、6字节或者更多的字节,而且这样的扩展也不需要重新打乱之前的编码序号,这样就通过规则的统一,达到一个更加“平滑”的兼容扩展。同时UTF-8编码可以通过屏蔽位和移位操作快速读写。

因此,大家是否看到,在进行统一化处理过程中,一方面需要及时发现这些反例,另一方面需要及时的考虑如何将这些反例融入到我们的统一化系统中,有时候,就是因为一个这样的反例就从某个角度上推翻了我们的统一化设计思路和方法,因此这对于我们将是十分宝贵的经验。

第二种抽象方式,其实要求我们进行一些适当的补充,而这些补充能够通过更加统一化的形式来进行处理,这样的处理方式很多,例如将指针进行迭代器的泛化处理等等,我们这里借用大师们的一个例子来说明这种统一化的方式的特点(通过定义NULL对象的方法来统一化我们的类体系)。

比如在一个系统中我们可以通过接口和组合模式来进行统一化的操作,如图7-2所示。

图7-2

但是,如果我们需要判断一个指针(引用)的时候,我们需要执行判断是否为空(NULL)的处理,此时如果我们增补这个NULL为一个NULL的类,将之统一到这个体系之中,那么我们的程序代码就能够更好的脱离具体的环境,能够更好的抽象并形成体系,如图7-3所示。

图7-3

这样我们就可以在NULL的重写接口的函数处理中进行我们认为非常合理的处理,然后非常美妙的达到我们的形式化的统一。所以这种抽象的方法要求我们自原有特性不足的情况下,能够根据进一步的扩展来划归到一个统一的形式化处理中,但是,这样的扩展也是有其条件和限制的,有很多时候,往往可能扩展不当而导致系统变得更加的非统一了,我想失败的情况肯定比成功的情况多得多,不然我们可以信手拈来就形成一个统一了,然而现实可能会更加“残酷”一些。

统一美揭示了系统的普遍联系上,美在我们对客观世界和谐协调、井然有序的真实反映上,从而使人们居高临下,揽括一切,增强了人们洞察世界的深广度,使人们获得更多的新成果,理解更多的新现象,对未知事物作出更可靠的预言,在改造世界中取得更大的胜利.追求统一美,必将促进软件设计的进一步发展。

由此统一性能够直接带给我们的是一种化繁为简的方案,这样的处理能够大大简化系统的复杂性,同时让理解和分析系统的其他人也能够非常简单的明白我们的系统,并且能够在这种统一的框架下进行更好的增量方式的开发和应用。

再回头看一下REST设计风格:

REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

REST设计准则:

ü 网络上的所有事物都被抽象为资源(resource)

ü 每个资源对应一个唯一的资源标识符(resource identifier)

ü 通过通用的连接器接口(generic connector interface)对资源进行操作。

ü 对资源的各种操作不会改变资源标识符。

ü 所有的操作都是无状态的(stateless)

原文地址:http://blog.51cto.com/13832308/2134695

时间: 2024-11-05 23:34:54

连载38:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)的相关文章

连载39:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)

1. 简单性 由于对简单的理解会很多,具有最少构成要素的结构,符合简单性观念.在众多可能中选择一个最方便的方式,也符合简单性观念.根据奥康的剃刀原则"如无必要,勿增实体"即简单有效的原则.然而简单性是一个相对的概念,是在不同的时空.不同的视角下存在的一种可被成本最低的理解. 但是在系统构架中,具有简单的设计方案,往往具有最少的约束,从而带来最为直接的处理方式,由于简单,所以设计开发都显得容易掌控,其稳定性和可靠性会大大的增强,同时由于简单,所以一旦存在需要扩展,其扩展的约束也是非常少,

连载40:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)

1. 完备和相容 完备性可以这样来简单理解:当一个对象具有完备性,即它不需要添加任何其他元素,这个对象也可称为完备的或完全的.完备性最为强烈的表现在数学之中,因为在整个体系中可以将之转化为一个一组公理系统,这组公理系统只有具有完备性,才能以此推广到这个领域,但是针对一个系统来说,在指定的范围内,虽然物理的系统是一个完备的系统,但是由于我们的有限的资源,有限的运行时间以及一些特殊的要求,我们描述系统常常又是非完备的.当然,我们需要通过有限的手段更为通用的设计方法来将完成一个绝大部分达到完备的系统.

连载15:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)

从置换到面向对象 对象化的划分,需要通过逻辑的分解进行,然而分解不过是我们有限的思维能力下的一种使用方法而已,我们在进行逻辑分解的过程中过多夸张了其独立性,是从某一个角度和一个方面来分解,然而对于无限的客观对象,我们只能够近似的逼近,客观对象永远是彼岸无法企及. 客观对象具有无穷多的参照方面,因为其本身的无限,是无法通过有限的分解将其分离.所以分解完成以后,组合这些分解完成的对象是无法表示未分解客观对象的整体特征,这些整体特征将按照其他的原理在运作,所以虽然肉体都是由大大的细胞组成,但是这些细胞

连载24:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)

对偶   对偶原理: 有两个定理(或命题),如果一个定理中的所有元素和运算替换为对应的对偶元素的就成为另一个定理时,这两个定理是相互对偶的.两个相互对偶的定理,如果其中一个定理真实,则另一个必然真实.数学上可以证明它的正确性. 所以"对偶"在数学中,指某些成对的概念,从它们本身的含义看是很不相同的.但从某种抽象规律或性质去看,不仅是一一对应的而且可以说是完全一致.如果能够根据某种规律或性质,证得成对概念中一个具有性质A,那么另一概念也必须具有性质A的原则. 从上可知对偶式相互的:对偶是

连载04:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)

置换的公理化过程 前面所涉及到的地址和值的"置换"关系以外,赋值.抽象.实现.继承等也都是一种"置换"的关系,而这种"置换"关系是否只是逻辑上我们的一个创造呢?还是客观现实中存在呢?这里我暂时先给出结论:"置换"变换其本质上是物理上存在的一种变换操作,只是我们将之应用到逻辑层面的设计之中,客观上的置换不是根据设计的需要进行更好的创造,我们只是利用这种客观的变换过程,来对逻辑设计进行评判和使用的一种解决方式而已. 那么"

连载16:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)

结构化对象 软件系统中存在的对象都为结构化的对象,例如函数.类.模板类等都可以认为是一种具有某种特征的结构化对象.这里大家需要关注的是,这些结构化对象不关心所处的"质"的处理,而只关注于其"量"的关系,这点可能会导致大家的质疑,比如面向对象中类不是不同实质的物体用不同的类来进行表达,而为什么又不关心其"质"的区别呢?这是因为我们无法通过有线的步骤来描述一个对象的"实质",我们只能通过"量"的描述来抽象(置换

连载31:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)

贝叶斯网络模型 贝叶斯定理: 贝叶斯定理是概率论中的一个结论,它跟随机变量的条件概率以及边缘概率分布有关.在有些关于概率的解说中,贝叶斯定理能够告知我们如何利用新证据修改已有的看法.通常,事件A在事件B(发生)的条件下的概率,与事件B在事件A的条件下的概率是不一样的:然而,这两者是有确定的关系,贝叶斯定理就是这种关系的陈述. 贝叶斯公式:   贝叶斯公式为利用搜集到的信息对原有判断进行修正提供了有效手段.在采样之前,经济主体对各种假设有一个判断(先验概率),关于先验概率的分布,通常可根据经济主体

连载29:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)

概率抽象 随机变量: 一个随机试验可能结果(称为基本事件)的全体组成一个基本空间Ω.随机变量X是定义在基本空间Ω上的取值为实数的函数,即基本空间Ω中每一个点,也就是每个基本事件都有实轴上的点与之对应. 离散随机变量: 有些随机变量,它全部可能取到的不相同的值是有限个或可列无限多个,也可以说概率1以一定的规律分布在各个可能值上.这种随机变量称为"离散型随机变量". 数学分布: 在数学意义上,我们将分布函数的定义表述为:设X是一个随机变量,x是任意实数,函数F(x)=P(X≤x)称为X的分

连载06:软件体系设计新方向:数学抽象、设计模式、系统架构与方案设计(简化版)(袁晓河著)

可置换性 可置换继续向上融入了分层.虚拟化.微内核等架构设计中,所以正确性.稳定性和可测试性等等特性以外还需要新增一个新的非功能属性,这就是可置换性,可置换性是一个比较隐式的特性,其外在表现不太为人所知,虽然在设计过程中,我们已经使用了可置换性的非功能属性来描述和审查设计,例如:我们的设计模型是否能够有效替换现实中的系统呢?在设计中我们经常这样地询问,但是可置换性却一直没有作为一项独立的非功能属性,那么可置换性的定义是什么呢?其应用领域是什么呢?其使用限制又是什么呢?其为什么是一个隐藏的属性而并