• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






高煥堂.EIT

 
 

Powered by 博客园
博客园 | 首页 | 新随笔 | 联系 | 订阅 订阅 | 管理

Framework-zz-44

    By 高焕堂 2013/06/01   

[Go Back]

[請指教:高老師的免費on-line教學視頻]  

                                                                                                               

Android & Framework:应用框架与平台框架开发技术  

 

框架幕后的美丽之序(Order)

--- 变与不变分离,创造简美之序(Order)

   

      变与不变的分离(Separate code that changes from the code that doesn’t)是设计应用和平台框架之基本原则和手艺。大文豪苏东坡在其赤壁赋中写道:「盖将自其变者而观之,则天地曾不能以一瞬;自其不变者而观之,则物与我皆无尽也,而又何羡乎?」。其说明了,人们可兼具多种观点,可同时看出同一个系统中的变与不变之相貌。大科学家爱因斯坦在其相对论里也告诉我们:表面上看来相对的外貌下,可能蕴藏着不变的特性。例如,物质与能量从外貌看来是相对的(即变的),但其背后蕴含着某种不变。虽然苏东坡和爱因斯坦所观察的对象都是自然物,而不是像软件、桌子、车子等人造物;但是在人们心灵深处,其心智的运用是一致的,当我们观察人造物而能区分出变与不变的部份时,就能将之分离开来,而获得优越之设计。[歡迎光臨 高煥堂 網頁: http://www.cnblogs.com/myEIT/ ]

    完美的变与不变分离,得到完美的接口(Interface),替将来强龙与地头蛇双方智慧的完美结合,建立了美好的基础。接口是一种规范(Specification),表达两种事物(或智慧)之间互相沟通、接合的一种共识(Agreement)。例如十字路口的「红绿灯与斑马线」,就是行人与汽车双方的接口;当此接口发挥其权威时,整个社会呈现出井然有「序」(Order);反之,当接口失去权威时,整体系统就可能发生「失序」的状态了。简而言之,框架设计之原则,不外乎三个焦点:

      

   图-1  以优美之序,容纳繁荣多变 

  • 序 ---- 即简单之序,或有机次序(Order)。
  • 容 ---- 以序来包容(Accommodate),有容乃大。
  • 易 ---- 复杂多变(Change),无尽繁荣。 

    包容繁杂多变是一件与的表现。序(即接口)是手段,包容繁杂才是(框架设计的)目标。序呈现美,繁杂带来活泼之力。易经干卦:天的多变。坤挂:大地的繁杂。唯有多变和繁(即复杂)荣,才孕育出多采多姿的大自然。繁杂本身是好事,是生命力的表现。无论是.NET或Android的框架之美都来自于:包容复杂而呈现简单的序,支持无尽繁荣。因之,接口设计是缔造系统整合架构之美的基础;也是框架设计的核心。例如,.NET框架里提供了一个IEnumeraor接口,如下图: 

   

   图-2  .NET框架提供的接口 

    强龙将易变部份抽离了,而得到上图里的接口,成为框架里的主要元素。强龙推出.NET框架之后,全球各区域的地头蛇就能将其各自善变的部份,结合到框架里。例如,地头蛇撰写 AP如下图: 

 

  图-3  .NET框架容纳繁荣多变 

以C#代码表示如下:

class myAP {

       // ………

       int[] values = new int[] {1, 2, 3, 4, 5}; 

       IEnumerator e = (IEnumerable)values).GetEnumerator();

       while(e.MoveNext()){

               Console.Write(e.Current.ToString() + " "); 

       }

       // ………

} 

 

其中,呈现了:

                      序:IEnumerator

                      变:values 

再如,.NET框架里所供的StreamFactory基类: 

public class abstract class StreamFactory {

    public Stream CreateStream();

    // ……..

}  

    强龙推出.NET框架之后,全球各区域的地头蛇就能将其各自善变的部份,结合到框架里。例如,地头蛇撰写应用子类如下: 

public class myStreamFactory: StreamFactory {

      public Stream CreateStream(){

           // ………

 }}

   接口(Interface)和基类(Base Class)都是序之实践手段,而应用子类则是繁荣多变的实践手段。如下图: 

 

 图-4  .NET框架之美:序容纳然繁荣多变 

     框架设计是基于特定领域的知识(Domain Knowledge)。然而知识有许多种,其变化的来源和时间经常是不一致的。例如,一家餐厅,其基本菜色、材料大多能天天相同,其知识并不会随着客人的不同而改变,我们称它为不变的。但是有些酸、甜程度等知识,就随着客人而异了,而且在时间上必须等到客人来到时才知道,我们称它为会变的。所以,有关于客人的酸、甜程度等知识,与基本菜色、材料等知识的变化上是不一致的,其获得的时间点也是不一致的。我们必须将两者分离开来,并将其不变部份纳入框架里,则应用框架就于焉而成了。在进行「变与不变之分离」时,必须秉持「知之为知之,不知为不知」的原则,明确叙述那些是已知的知识、那些是未知的知识、那些是善变的知识。设计师就依据这些叙述而决定那些部份应该留空白(就如杯子内挖空才能装饮料),那些类应该分离,并定义接口,让它们未来能随时组合起来。

       其实,这种设计原则也蛮简单的,在数千年前的老子已经使用过了,他曾说:畚箕中间必须「挖空」才有用! 虽然简单,却是千年不朽的设计手艺。而「变与不变之分离」就是这个简单的设计原则罢了。

              ~~老子.道德经:有之以为利,无之以为用。~~

              说明:畚箕必须先挖空(无之)才能拿来装东西(有之);

所以先无之而后始能有之。挖出来的会变部份成为元素,但有趣的是:挖出之后留下的空间才是重点,它能容纳原来被挖出的元素,也能容纳未来的其它元素。依据老子的思维,这个挖空的喜帖组件看似「无用」,其实是「为用大矣」! ◆

 

[Go Back]

 

 

 

发表于 2013-11-13 17:09  高煥堂.EIT  阅读(228)  评论(0)    收藏  举报
 
刷新页面返回顶部