
分开表现之后,藉由计算机语言的编译器(Compiler)将基类与子类结合起来,成为完整的类(即含有完整的知识)。这些完整的类就是完整的软件,也是可以在计算机里执行的软件,让计算机具有人们的智能,呈现出人们所期待的行为。
那么,如何将人们知识分为两种呢?如何切分呢?答案是:以软件用户(User)出现的时间点(Time-point)为基准点而切分开来。于是,就分出两种知识了,包括:
l 领域知识
在用户出现之前,软件开发者(Developer)所能获得的知识。就是领域的共通性知识,简称:领域知识(Domain Knowledge)。
l 应用知识
在用户出现之后,软件开发者所能获得的知识。就是应用的特殊性知识,简称:应用知识(Application Knowledge)或用户知识(User Knowledge)。
兹以时间为主轴,绘出图形如下:

从上图可看出来,开发者是先获得领域知识;经过数天、数个月或数年之后,用户出现了,才会获得应用知识。领域知识先表达于基类,而应用知识则后表达于子类。然后使用程序编译器将它们结合起来,成为完整可用的软件了,如下图:

从上图可看出来,将这些基类集合起来,就成为该特殊领域框架(Domain-Specific Framework, 简称DSF)了。
兹举个例子来说吧!童话故事里有位川顿国王,他有7个女儿,最小的女儿叫小美人鱼。川顿国王很疼爱女儿,很关心女儿出嫁的事。然而女儿的结婚对象还没出现呢! 然而,依据国王之前嫁女儿的经验,他已经拥有丰富的嫁女儿经验和领域知识了。一旦女儿的结婚对象出现时,就能获得特定应用情境(即小女儿出嫁)的应用知识了。

例如,喜帖能在确定嫁给谁之前先印好,新郎名称、日期、喜宴地点等部份预留空白即可了。待订婚之后,确定结婚对象、日期、喜宴地点时,才填入喜帖即可了。
从上述可知,出嫁领域知识在结婚之前就已知(Available)了,于是设计师就依据这些领域知识而着手工作了。例如:
© 需要喜帖,喜帖的格式及某些内容。
——- 于是,设计师就依据这些知识而着手设计喜帖、印制喜帖。
© 需要新娘捧花,花的种类颜色。
——- 于是,设计师就着手设计(或委外设计)捧花、预订捧花。
© 需要照片的相框,相框材质及大小。
——- 于是,设计师就先购买相框。
另一方面,关于出嫁的应用知识在确定结婚对象之前是未知(Unavailable)的。此时,设计师必须预留空白、订定接口、或只设计而不落实(Implement)等。例如:
l 新郎名字是未知的。
——- 于是,设计师就在其所设计的喜帖上预留空白。这就像老子设计畚箕时,因为还未知农夫会拿去装什么东西,所以老子就将畚箕中间挖空(预留虚的空间)。如下图:

l 结婚日期未定,那一天需要新娘捧花是未知的。
——- 于是,设计师不能着手买花。也就是能先进行设计,但还不能实际执行(Implement)!
l 还没有婚礼照片。
——- 于是,设计师购买的相框组件必须订定有适当的接口,待婚礼之后,照片组件就能顺利放入相框里。
无论在时光隧道的任何一个时间点,都有已知知识与未知知识。设计师的素养是:在攸关知识不齐备的环境之下,依赖优越的洞悉力、判断力,做出美好的设计决策。其实,这种手艺也蛮简单的,在数千年前的老子已经使用过了,他曾说:畚箕中间必须「挖空」才有用! 虽然简单,却是千年不朽的设计手艺。而「变与不变之分离」就是这个简单的设计思维罢了。
挖出来的会变部份成为元素,但有趣的是:挖出之后留下的空间才是重点,它能容纳原来被挖出的元素,也能容纳未来的其它元素。依据老子的思维,这个挖空的喜帖组件看似「无用」,其实是「为用大矣」!以上是藉由童话故事来阐述框架设计的基本手艺。
当我们以「用户出现」或「出嫁对象出现」的时间点为基准,将攸关知识切分开来,成为两种:领域知识与应用知识。相对上,领域知识属于「不变」;而应用知识属于「善变」。所以,本文说明如何以时间元素来分离便与不变的知识,就是实践「变与不变之分离」框架设计原则的一种常见技艺(术)。
原文(http://www.miiceic.org.cn/07/0702/070201/200911161432352.asp)
中程在线(北京)科技有限公司
中国信息产业培训网
www.miiceic.org.cn
咨询热线:400-7068-123